Farbe der Netzwerkverbindungen: Unterschied zwischen den Versionen

K
Überschrift "Technische Umsetzung" fängt jetzt mit großem Buchstaben an
(Kommasetzung)
K (Überschrift "Technische Umsetzung" fängt jetzt mit großem Buchstaben an)
 
(10 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Datei:Netzwerkverbindungen.png|mini|Die Netzwerksymbole in Blau (ab Android {{Android|4.0}}) und Grau]]
[[Datei:Netzwerkverbindungen.png|mini|Die Netzwerksymbole in Blau (ab Android {{Android|4.0}}) und Grau]]
Die Android-Benachrichtigungszeile beinhaltet unter anderem auch Symbole für aktive Netzwerkverbindungen wie WLAN oder das Mobile Netzwerk (UMTS/GPRS u.ä.). Immer wieder, so auch in den Foren von Android-Hilfe.de<ref>http://www.android-hilfe.de/android-allgemein/395599-bedeuten-die-farben-bei-dem-netzempfang.html</ref><ref>http://www.android-hilfe.de/motorola-atrix-forum/179474-empfangsbalken-edge-anzeige-mal-blau-mal-weiss.html</ref><ref>http://www.android-hilfe.de/galaxy-nexus-forum/175043-geloest-farbe-der-netzwerkverbindungen.html</ref><ref>http://www.android-hilfe.de/huawei-ascend-y200-forum/258410-empfangsbalken-mal-gruen-mal-weiss.html</ref><ref>http://www.android-hilfe.de/huawei-ideos-x3-u8510-forum/196762-empfangsbalken-weiss-statt-gruen.html</ref>, kommt die Frage auf, warum die Symbole mal grau und mal Grün (unter Android {{Android|2}}) bzw. Blau (unter Android {{Android|4}}) sind.
Die [[Android]]-[[Benachrichtigungszeile]] beinhaltet unter anderem Symbole für aktive Netzwerkverbindungen wie [[WLAN]] oder das Mobile Netzwerk (GPRS/UMTS/[[LTE]] u.Ä.). Immer wieder, so auch in den Foren von Android-Hilfe.de<ref>http://www.android-hilfe.de/android-allgemein/395599-bedeuten-die-farben-bei-dem-netzempfang.html</ref><ref>http://www.android-hilfe.de/motorola-atrix-forum/179474-empfangsbalken-edge-anzeige-mal-blau-mal-weiss.html</ref><ref>http://www.android-hilfe.de/galaxy-nexus-forum/175043-geloest-farbe-der-netzwerkverbindungen.html</ref><ref>http://www.android-hilfe.de/huawei-ascend-y200-forum/258410-empfangsbalken-mal-gruen-mal-weiss.html</ref><ref>http://www.android-hilfe.de/huawei-ideos-x3-u8510-forum/196762-empfangsbalken-weiss-statt-gruen.html</ref>, kommt die Frage auf, warum die Symbole mal grau und mal grün (unter Android {{Android|2}}) bzw. blau (unter Android {{Android|4}}) sind.


=== Farberklärung ===
Das Farbspiel ist selbstverständlich nicht bedeutungslos und hat einen Hintergrund: Ist das Symbol blau (bzw. grün), so besteht eine aktive, unbeschränkte Internetverbindung (unabhängig, ob diese über WLAN oder einem mobilen Netzwerk hergestellt wurde). Ist das Symbol hingegen grau, so besteht zwar eine Verbindung mit einem Netzwerk, allerdings konnte keine Internetverbindung hergestellt werden, oder es wurde eine Einschränkung erkannt (bspw. muss sich der Nutzer für das WLAN-Netz authentifizieren, o.ä.), jedenfalls '''kann''' es Probleme bei der Kommunikation mit dem Internet geben.
Das dieses Verahlten nicht willkürlig ist, sollte klar sein. Dieses Farbspiel hat in der Tat eine Bedeutung: Sind die Symbole Farbig (Grün oder Blau), bedeutet dies, das die Hintergrundatensyncronisation aktiv ist, bzw. das eine Verbindung mit den Google-Servern besteht.


D.h.: Sind die Symbole farblos (Grau), bedeutet dies, dass eines dieser 4 Szenarien zutrifft:
Auch wenn die Unterscheidung der Farbgebung der Netzwerk-Symbole im [[AOSP]] enthalten ist, verändern einige Hersteller das User Interface, wobei die Farbgebung verändert oder die Unterscheidung komplett weg gelassen werden kann. So unterscheidet [[HTC Sense|HTC's Sense]] nur zwischen einer hergestellten Internetverbindung (weiß) und einem dabei festgestellten Problem (grau). Eine zusätzliche Authentifikation oder andere Einschränkung ist hier nicht in der Statusleiste ersichtlich.
* kein Kontakt zum Internet
* Routing zu den Googleservern gestört (keine Verbindung zu den Google-Servern)
* Ausfall der Google Server
* Hintergrundsynchronisation ausgeschaltet


=== Siehe auch ===
== Technische Umsetzung ==
Die Statusbar ist Teil der SystemUI.apk, welche Teil des AOSP Projektes ist und der Source Code somit öffentlich zur Verfügung steht.<ref>{{Internetquelle|titel = platform/frameworks/base - Git at Google|url = https://android.googlesource.com/platform/frameworks/base/|zugriff = 2015-11-29|werk = android.googlesource.com}}</ref> Die Farbgebung betrifft hierbei mehrere Symbole, zum Verständnis der Umsetzung ziehen wir hier das Symbol für die WiFi (WLAN) Verbindung heran. Die möglichen Symbole werden dabei in der Klasse WifiIcons definiert:<ref>{{Internetquelle|titel = android/platform_frameworks_base|url = https://github.com/android/platform_frameworks_base/blob/7de7e0b0dd61acba813dec3a07d29f1d62026470/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiIcons.java#L22-L33|zugriff = 2015-11-29|werk = GitHub}}</ref>
<syntaxhighlight lang="java">
static final int[][] WIFI_SIGNAL_STRENGTH = {
{ R.drawable.stat_sys_wifi_signal_0,
  R.drawable.stat_sys_wifi_signal_1,
  R.drawable.stat_sys_wifi_signal_2,
  R.drawable.stat_sys_wifi_signal_3,
  R.drawable.stat_sys_wifi_signal_4 },
{ R.drawable.stat_sys_wifi_signal_0_fully,
  R.drawable.stat_sys_wifi_signal_1_fully,
  R.drawable.stat_sys_wifi_signal_2_fully,
  R.drawable.stat_sys_wifi_signal_3_fully,
  R.drawable.stat_sys_wifi_signal_4_fully }
};
</syntaxhighlight>
 
Das Array <code>WIFI_SIGNAL_STRENGTH</code> hält dabei zwei weitere Arrays (auch als multidimensionales Array bezeichnet), die die einzelnen Symbole definieren (Array 1 (bzw. 0 bei korrekter Zählweise), ohne '''_fully''' im Namen, sind dabei die "grauen" Symbole, Array 2 (bzw. 1), mit '''_fully''' im Namen, die blauen). Die Icons selbst liegen als [http://developer.android.com/intl/vi/reference/android/graphics/drawable/VectorDrawable.html VectorDrawable] vor, und können am einfachsten mit dem [[Android Studio]] visualisiert werden. Genutzt werden die Icons in der Klasse WifiSignalController, der Updates für die WiFi-Signale verarbeitet:<ref>{{Internetquelle|titel = android/platform_frameworks_base|url = https://github.com/android/platform_frameworks_base/blob/d59921149bb5948ffbcb9a9e832e9ac1538e05a0/packages/SystemUI/src/com/android/systemui/statusbar/policy/WifiSignalController.java#L59|zugriff = 2015-11-29|werk = GitHub}}</ref>
<syntaxhighlight lang="java">
mCurrentState.iconGroup = mLastState.iconGroup = new IconGroup(
"Wi-Fi Icons",
WifiIcons.WIFI_SIGNAL_STRENGTH,
WifiIcons.QS_WIFI_SIGNAL_STRENGTH,
AccessibilityContentDescriptions.WIFI_CONNECTION_STRENGTH,
WifiIcons.WIFI_NO_NETWORK,
WifiIcons.QS_WIFI_NO_NETWORK,
WifiIcons.WIFI_NO_NETWORK,
WifiIcons.QS_WIFI_NO_NETWORK,
AccessibilityContentDescriptions.WIFI_NO_CONNECTION
);
</syntaxhighlight>
sowie in der Routine, die die Icon-ID zurückliefert:<ref>{{Internetquelle|titel = android/platform_frameworks_base|url = https://github.com/android/platform_frameworks_base/blob/d59921149bb5948ffbcb9a9e832e9ac1538e05a0/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalController.java#L135-L143|zugriff = 2015-11-29|werk = GitHub}}</ref>
<syntaxhighlight lang="java" line>
public int getCurrentIconId() {
if (mCurrentState.connected) {
return getIcons().mSbIcons[mCurrentState.inetCondition][mCurrentState.level];
} else if (mCurrentState.enabled) {
return getIcons().mSbDiscState;
} else {
return getIcons().mSbNullState;
}
}
</syntaxhighlight>
Entscheidend ist hier der erste if-Zweig in Zeile 2-4. Falls die aktuelle Verbindung aktiv und mit einem Netzwerk verbunden ist, wird über die Variable <code>mCurrentState.inetCondition</code> entschieden, ob das Array 0 (graue Symbole) oder Array 1 (blaue Symbole) verwendet wird. Die Variable selbst wird in der Update-Routine für die aktuelle Verbindung gesetzt:<ref>{{Internetquelle|titel = android/platform_frameworks_base|url = https://github.com/android/platform_frameworks_base/blob/d59921149bb5948ffbcb9a9e832e9ac1538e05a0/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalController.java#L79-L82|zugriff = 2015-11-29|werk = GitHub}}</ref>
<syntaxhighlight lang="java">
public void updateConnectivity(BitSet connectedTransports, BitSet validatedTransports) {
mCurrentState.inetCondition = validatedTransports.get(mTransportType) ? 1 : 0;
notifyListenersIfNecessary();
}
</syntaxhighlight>
Die übergebene Variable <code>validatedTarnsports</code> beinhaltet den Status aller aktiven Verbindungen, und wird in der Klasse NetworkControllerImpl über die Update-Routine befüllt:<ref>{{Internetquelle|titel = android/platform_frameworks_base|url = https://github.com/android/platform_frameworks_base/blob/d59921149bb5948ffbcb9a9e832e9ac1538e05a0/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java#L568-L601|zugriff = 2015-11-29|werk = GitHub}}</ref>
<syntaxhighlight lang="java" line>
private void updateConnectivity() {
mConnectedTransports.clear();
mValidatedTransports.clear();
for (NetworkCapabilities nc :
mConnectivityManager.getDefaultNetworkCapabilitiesForUser(mCurrentUserId)) {
for (int transportType : nc.getTransportTypes()) {
mConnectedTransports.set(transportType);
if (nc.hasCapability(NET_CAPABILITY_VALIDATED)) {
mValidatedTransports.set(transportType);
}
}
}
 
if (CHATTY) {
Log.d(TAG, "updateConnectivity: mConnectedTransports=" + mConnectedTransports);
Log.d(TAG, "updateConnectivity: mValidatedTransports=" + mValidatedTransports);
}
 
mInetCondition = !mValidatedTransports.isEmpty();
 
pushConnectivityToSignals();
}
 
/**
* Pushes the current connectivity state to all SignalControllers.
*/
private void pushConnectivityToSignals() {
// We want to update all the icons, all at once, for any condition change
for (MobileSignalController mobileSignalController : mMobileSignalControllers.values()) {
mobileSignalController.updateConnectivity(mConnectedTransports, mValidatedTransports);
}
mWifiSignalController.updateConnectivity(mConnectedTransports, mValidatedTransports);
mEthernetSignalController.updateConnectivity(mConnectedTransports, mValidatedTransports);
}
</syntaxhighlight>
Eine Verbindung wird dann '''blau''' markiert, wenn sie den Status <code>NET_CAPABILITY_VALIDATED</code> hat (siehe Code-Zeile 8-10), welcher im Code wie folgt beschrieben wird:<ref>{{Internetquelle|titel = android/platform_frameworks_base|url = https://github.com/android/platform_frameworks_base/blob/d89b76a58dcffa7dbc5974d14c7914f44233bef3/core/java/android/net/NetworkCapabilities.java#L177|zugriff = 2015-11-29|werk = GitHub}}</ref><blockquote>Indicates that connectivity on this network was successfully validated. For example, for a</blockquote><blockquote>network with NET_CAPABILITY_INTERNET, it means that Internet connectivity was successfully</blockquote><blockquote>detected.</blockquote>
 
== Siehe auch ==
* [[Symbole in der Benachrichtigungszeile]]
*[[4G oder LTE wonach richtet sich die Anzeige im Status|4G oder LTE: Wonach richtet sich die Anzeige im Status?]]
 
== Einzelnachweise ==
<references />
<references />
[[Kategorie:Allgemein]]
Autopatrol, Moderator
1.304

Bearbeitungen