Berechtigung für den Zugriff auf WLAN-Geräte in der Nähe anfordern

Apps, die auf Android 13 (API-Level 33) oder höher ausgerichtet sind und WLAN-Verbindungen verwalten, müssen die Laufzeitberechtigung NEARBY_WIFI_DEVICES anfordern. Mit dieser Berechtigung ist es einfacher, den Zugriff einer App auf WLAN-Geräte in der Nähe zu begründen. In früheren Android-Versionen musste für diese Apps stattdessen die Berechtigung ACCESS_FINE_LOCATION erklärt werden.

Berechtigung gehört zur Gruppe „Geräte in der Nähe“

Die Berechtigung NEARBY_WIFI_DEVICES gehört zur Berechtigungsgruppe Geräte in der Nähe. Diese in Android 12 (API-Level 31) hinzugefügte Gruppe enthält auch Berechtigungen für Bluetooth und Ultrabreitband. Wenn Sie eine Kombination von Berechtigungen aus dieser Berechtigungsgruppe anfordern, zeigt das System ein einzelnes Laufzeitdialogfeld an und bittet den Nutzer, den Zugriff Ihrer App auf Geräte in der Nähe zu genehmigen. In den Systemeinstellungen muss der Nutzer die Berechtigungen Geräte in der Nähe als Gruppe aktivieren und deaktivieren. Nutzer können beispielsweise den WLAN-Zugriff nicht deaktivieren, aber den Bluetooth-Zugriff für eine bestimmte App aktiviert lassen.

Behaupten Sie deutlich, dass Ihre App keinen physischen Standort ermittelt.

Wenn Sie Ihre App auf Android 13 oder höher ausrichten, sollten Sie prüfen, ob Ihre App Standortinformationen von Wi-Fi APIs ableitet. Falls nicht, sollten Sie dies unbedingt bestätigen. Um diese Assertion zu erstellen, setzen Sie das Attribut usesPermissionFlags in der Manifestdatei Ihrer App auf neverForLocation, wie im folgenden Code-Snippet gezeigt. Der Vorgang ist ähnlich wie bei der Erklärung, dass keine Bluetooth-Geräteinformationen zur Standortermittlung verwendet werden:

<manifest ...>
    <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"
                     android:usesPermissionFlags="neverForLocation" />
    <application ...>
        ...
    </application>
</manifest>

Für frühere Versionen und einige APIs ist die Berechtigung zur Standortermittlung erforderlich

Für mehrere Wi-Fi APIs ist die Berechtigung ACCESS_FINE_LOCATION erforderlich, auch wenn deine App auf Android 13 oder höher ausgerichtet ist. Beispiele hierfür sind die folgenden Methoden aus der Klasse WifiManager:

Da die Berechtigung NEARBY_WIFI_DEVICES nur unter Android 13 und höher verfügbar ist, sollten Sie alle Deklarationen für ACCESS_FINE_LOCATION beibehalten, um die Abwärtskompatibilität in Ihrer App zu gewährleisten. Solange Ihre App jedoch nicht anderweitig auf genauen Standortinformationen angewiesen ist, können Sie die maximale SDK-Version dieser Berechtigung auf 32 festlegen, wie im folgenden Code-Snippet gezeigt:

<manifest ...>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
                     android:maxSdkVersion="32" />
    <application ...>
        ...
    </application>
</manifest>

Nach APIs suchen, die die Berechtigung erfordern

Wenn deine App auf Android 13 oder höher ausgerichtet ist, musst du die Berechtigung NEARBY_WIFI_DEVICES für den Aufruf einer der folgenden Wi-Fi APIs deklarieren:

Workflows für WLAN-Zugriff

Abbildung 1 zeigt den WLAN-Zugriffsworkflow auf Geräten mit Android 13 oder höher für Apps, die auf Android 13 oder höher ausgerichtet sind. Solange du bestätigst, dass deine App den physischen Standort nicht aus den WLAN-Geräteinformationen ableitet, musst du die Berechtigung ACCESS_FINE_LOCATION nicht mehr erklären:

Abbildung 1. Flussdiagramm zur Ermittlung, ob eine App, die auf Android 13 (API-Level 33) oder höher ausgerichtet ist, auf WLAN-Informationen zugreifen kann.

Abbildung 2 zeigt den WLAN-Zugriffsworkflow auf Geräten mit 12L oder weniger. Sie benötigen die Berechtigung ACCESS_FINE_LOCATION.

Abbildung 2: Flussdiagramm, um festzustellen, ob eine App, die auf 12L (API-Level 32) oder niedriger ausgerichtet ist, auf WLAN-Informationen zugreifen kann.