Bearbeiten von „Farbe der Netzwerkverbindungen

    Warnung: Du bist nicht angemeldet. Deine IP-Adresse wird bei Bearbeitungen öffentlich sichtbar. Melde dich an oder erstelle ein Benutzerkonto, damit Bearbeitungen deinem Benutzernamen zugeordnet werden. Ein eigenes Benutzerkonto hat eine ganze Reihe von Vorteilen.

    Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.

    Aktuelle Version Dein Text
    Zeile 1: Zeile 1:
    [[Datei:Netzwerkverbindungen.png|mini|Die Netzwerksymbole in Blau (ab Android {{Android|4.0}}) und Grau]]
    [[Datei:Netzwerkverbindungen|Anbei die Beispiele von grau und blau unter Android 4]]
    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.
    In der Benachrichtigungsleiste befinden sich auch die Symbole für Netzwerkverbindungen (WLAN, Mobilfunkdaten)


    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.
    In den Foren 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> kommen immer wieder Fragen, warum das Symbol mal grau und mal Grün (unter {{Android|2}}) bzw. Blau unter {{Android|4}}) ist.


    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.
    = Die Lösung =
    Wenn die Symbole Farbig sind, bedeutet dies, das die Hintergrundatensyncronisation aktiv ist, bzw. das eine Verbindung mit den Google-Servern besteht.


    == Technische Umsetzung ==
    D.h. der Farbverlust bedeutet einen dieser 4 Scenarien
    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>
    -kein Kontakt zum Internet
    <syntaxhighlight lang="java">
    -Routing zu den Googleservern gestört
    static final int[][] WIFI_SIGNAL_STRENGTH = {
    -Googleserver spinnen.
    { R.drawable.stat_sys_wifi_signal_0,
    -Sync abgeschaltet.
      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>
    = Links "
    <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]]
    Bitte kopiere keine Webseiten, die nicht deine eigenen sind, benutze keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!
    Du gibst uns hiermit deine Zusage, dass du den Text selbst verfasst hast, dass der Text Allgemeingut (public domain) ist, oder dass der Urheber seine Zustimmung gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weise bitte auf der Diskussionsseite darauf hin. Bitte beachte, dass alle Android Wiki-Beiträge automatisch unter der „Creative Commons Attribution/Share-Alike Lizenz 3.0“ stehen. Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann klicke nicht auf „Seite speichern“.

    Um das Wiki vor automatisiertem Bearbeitungsspam zu schützen, bitten wir dich, das folgende CAPTCHA zu lösen:

    Abbrechen Bearbeitungshilfe (wird in einem neuen Fenster geöffnet)