Farbe der Netzwerkverbindungen

Aus Android Wiki
Die Netzwerksymbole in Blau (ab Android 4.0 Ice Cream Sandwich "Ice Cream Sandwich") und Grau

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[1][2][3][4][5], kommt die Frage auf, warum die Symbole mal grau und mal grün (unter Android Eclair) bzw. blau (unter Android Ice Cream Sandwich "Ice Cream Sandwich") sind.

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.

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'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.

Technische Umsetzung[Bearbeiten | Quelltext bearbeiten]

Die Statusbar ist Teil der SystemUI.apk, welche Teil des AOSP Projektes ist und der Source Code somit öffentlich zur Verfügung steht.[6] 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:[7]

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 }
	};

Das Array WIFI_SIGNAL_STRENGTH 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 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:[8]

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
		);

sowie in der Routine, die die Icon-ID zurückliefert:[9]

public int getCurrentIconId() {
	if (mCurrentState.connected) {
		return getIcons().mSbIcons[mCurrentState.inetCondition][mCurrentState.level];
	} else if (mCurrentState.enabled) {
		return getIcons().mSbDiscState;
	} else {
		return getIcons().mSbNullState;
	}
}

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 mCurrentState.inetCondition 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:[10]

public void updateConnectivity(BitSet connectedTransports, BitSet validatedTransports) {
	mCurrentState.inetCondition = validatedTransports.get(mTransportType) ? 1 : 0;
	notifyListenersIfNecessary();
}

Die übergebene Variable validatedTarnsports beinhaltet den Status aller aktiven Verbindungen, und wird in der Klasse NetworkControllerImpl über die Update-Routine befüllt:[11]

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);
}

Eine Verbindung wird dann blau markiert, wenn sie den Status NET_CAPABILITY_VALIDATED hat (siehe Code-Zeile 8-10), welcher im Code wie folgt beschrieben wird:[12]

Indicates that connectivity on this network was successfully validated. For example, for a

network with NET_CAPABILITY_INTERNET, it means that Internet connectivity was successfully

detected.

Siehe auch[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. http://www.android-hilfe.de/android-allgemein/395599-bedeuten-die-farben-bei-dem-netzempfang.html
  2. http://www.android-hilfe.de/motorola-atrix-forum/179474-empfangsbalken-edge-anzeige-mal-blau-mal-weiss.html
  3. http://www.android-hilfe.de/galaxy-nexus-forum/175043-geloest-farbe-der-netzwerkverbindungen.html
  4. http://www.android-hilfe.de/huawei-ascend-y200-forum/258410-empfangsbalken-mal-gruen-mal-weiss.html
  5. http://www.android-hilfe.de/huawei-ideos-x3-u8510-forum/196762-empfangsbalken-weiss-statt-gruen.html
  6. Vorlage:Internetquelle/Wartung/Zugriffsdatum nicht im ISO-FormatInterner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. In: Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. Abgerufen am 2015-11-29.Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.
  7. Vorlage:Internetquelle/Wartung/Zugriffsdatum nicht im ISO-FormatInterner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. In: Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. Abgerufen am 2015-11-29.Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.
  8. Vorlage:Internetquelle/Wartung/Zugriffsdatum nicht im ISO-FormatInterner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. In: Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. Abgerufen am 2015-11-29.Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.
  9. Vorlage:Internetquelle/Wartung/Zugriffsdatum nicht im ISO-FormatInterner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. In: Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. Abgerufen am 2015-11-29.Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.
  10. Vorlage:Internetquelle/Wartung/Zugriffsdatum nicht im ISO-FormatInterner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. In: Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. Abgerufen am 2015-11-29.Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.
  11. Vorlage:Internetquelle/Wartung/Zugriffsdatum nicht im ISO-FormatInterner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. In: Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. Abgerufen am 2015-11-29.Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.
  12. Vorlage:Internetquelle/Wartung/Zugriffsdatum nicht im ISO-FormatInterner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. In: Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127. Abgerufen am 2015-11-29.Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.