In Android 10 (API-Level 29) werden eine Reihe von Funktionen und Verhaltensänderungen eingeführt, um die Privatsphäre der Nutzer besser zu schützen. Diese Änderungen erweitern die Transparenz und Kontrolle, die Nutzer über ihre Daten und die Funktionen haben, die sie Apps gewähren. Diese Funktionen können dazu führen, dass sich bestimmte Verhaltensweisen oder Daten, von denen deine App abhängt, anders verhalten als bei älteren Versionen der Plattform. Die Auswirkungen auf Ihre App sollten minimal sein, wenn Sie die aktuellen Best Practices für den Umgang mit Nutzerdaten befolgen.
Auf dieser Seite finden Sie eine Zusammenfassung der einzelnen Änderungen.
Wichtigste Änderungen
In diesem Abschnitt werden die wichtigsten Änderungen in Android 10 in Bezug auf den Datenschutz beschrieben.
Zugriff auf externen Speicher, der auf App-Dateien und ‑Medien beschränkt ist
Standardmäßig erhalten Apps, die auf Android 10 und höher ausgerichtet sind, begrenzten Zugriff auf den externen Speicher, auch begrenzter Speicher genannt. Solche Apps können die folgenden Dateitypen auf einem externen Speichergerät sehen, ohne dass sie speicherbezogene Nutzerberechtigungen anfordern müssen:
- Dateien im App-spezifischen Verzeichnis, auf die über
getExternalFilesDir()zugegriffen wird. - Fotos, Videos und Audioclips, die die App aus dem MediaStore erstellt hat.
Weitere Informationen zum begrenzten Speicher sowie zum Freigeben, Aufrufen und Ändern von Dateien, die auf externen Speichergeräten gespeichert sind, findest du in den Leitfäden zum Verwalten von Dateien im externen Speicher und zum Aufrufen und Ändern von Mediendateien.
Für den Zugriff auf den Gerätestandort im Hintergrund ist eine Berechtigung erforderlich
Um die zusätzliche Kontrolle zu unterstützen, die Nutzer über den Zugriff einer App auf Standortinformationen haben, wird in Android 10 die Berechtigung ACCESS_BACKGROUND_LOCATION eingeführt.
Im Gegensatz zu den Berechtigungen ACCESS_FINE_LOCATION und ACCESS_COARSE_LOCATION wirkt sich die Berechtigung ACCESS_BACKGROUND_LOCATION nur auf den Zugriff einer App auf den Standort aus, wenn sie im Hintergrund ausgeführt wird. Eine App greift auf die Standortermittlung im Hintergrund zu, sofern nicht eine der folgenden Bedingungen erfüllt ist:
- Eine Aktivität, die zur App gehört, ist sichtbar.
In der App wird ein Dienst im Vordergrund ausgeführt, für den der Typ von Dienst im Vordergrund
locationdeklariert wurde.Wenn Sie den Typ des Dienstes im Vordergrund für einen Dienst in Ihrer App deklarieren möchten, legen Sie für
targetSdkVersionodercompileSdkVersionIhrer App den Wert29oder höher fest. Weitere Informationen dazu, wie Dienste im Vordergrund von Nutzern initiierte Aktionen fortsetzen können, für die Zugriff auf den Standort erforderlich ist
Wenn Ihre App Geofences erstellt und überwacht und auf Android 10 (API-Level 29) oder höher ausgerichtet ist, müssen Sie die Berechtigung ACCESS_BACKGROUND_LOCATION deklarieren.
Zugriff wird automatisch gewährt, wenn die App auf Android 9 oder niedriger ausgerichtet ist
Wenn Ihre App unter Android 10 oder höher ausgeführt wird, aber auf Android 9 (API-Level 28) oder niedriger ausgerichtet ist, gilt Folgendes:
- Wenn in Ihrer App ein
<uses-permission>-Element fürACCESS_FINE_LOCATIONoderACCESS_COARSE_LOCATIONdeklariert ist, fügt das System während der Installation automatisch ein<uses-permission>-Element fürACCESS_BACKGROUND_LOCATIONhinzu. - Wenn deine App entweder
ACCESS_FINE_LOCATIONoderACCESS_COARSE_LOCATIONanfordert, fügt das System der Anfrage automatischACCESS_BACKGROUND_LOCATIONhinzu.
Zugriff, wenn das Gerät auf Android 10 aktualisiert wird
Wenn ein Nutzer Ihrer App Zugriff auf den Gerätestandort gewährt – entweder ACCESS_COARSE_LOCATION oder ACCESS_FINE_LOCATION – und dann ein Upgrade seines Geräts von Android 9 auf Android 10 durchführt, aktualisiert das System automatisch die standortbezogenen Berechtigungen, die Ihrer App gewährt wurden. Die Berechtigungen, die Ihre App nach dem Upgrade erhält, hängen von der Ziel-SDK-Version und den definierten Berechtigungen ab, wie in der folgenden Tabelle dargestellt:
Tabelle 1. Änderungen am Status der Berechtigung zur Standortermittlung nach dem Upgrade des Geräts auf Android 10
| Zielplattformversion | Grobe oder genaue Berechtigung gewährt? |
Berechtigung für den Hintergrund im Manifest definiert? |
Standardberechtigungsstatus aktualisiert |
|---|---|---|---|
| Android 10 | Ja | Ja | Vordergrund- und Hintergrundzugriff |
| Android 10 | Ja | Nein | Nur Vordergrundzugriff |
| Android 10 | Nein | (Vom System ignoriert) | Kein Zugriff |
| Android 9 oder niedriger | Ja | Wird vom System beim Geräteupgrade automatisch hinzugefügt | Vordergrund- und Hintergrundzugriff |
| Android 9 oder niedriger | Nein | (Vom System ignoriert) | Kein Zugriff |
Der Nutzer kann diese Zugriffsebene auch dann ändern, wenn das System den Zugriff deiner App auf den Gerätestandort automatisch aktualisiert. Beispielsweise kann der Nutzer den Zugriff deiner App auf den Vordergrund beschränken oder den Zugriff vollständig widerrufen. Bevor Ihre App versucht, auf den Standort des Geräts zuzugreifen, insbesondere innerhalb eines Dienstes im Vordergrund, sollte sie prüfen, ob der Nutzer Ihrer App weiterhin erlaubt, diese Standortinformationen zu erhalten.
Zugriff wird beim Aktualisieren des Ziel-API-Levels auf Android 10-Geräten widerrufen
Angenommen, deine App ist bereits auf einem Gerät mit Android 10 installiert. Wenn du deine App in dieser Situation auf Android 10 aktualisierst, wird die Berechtigung ACCESS_BACKGROUND_LOCATION vom Gerät widerrufen.
Weitere Informationen zum Abrufen des Gerätestandorts, während Ihre App im Hintergrund ausgeführt wird, finden Sie im Leitfaden zum regelmäßigen Abrufen von Standort-Updates.
Einschränkungen beim Starten von Aktivitäten im Hintergrund
Ab Android 10 gelten Einschränkungen für das Starten von Aktivitäten im Hintergrund. Diese Verhaltensänderung trägt dazu bei, Unterbrechungen für den Nutzer zu minimieren und ihm mehr Kontrolle darüber zu geben, was auf dem Bildschirm angezeigt wird. Solange Ihre App Aktivitäten als direkte Folge einer Nutzerinteraktion startet, ist sie von diesen Einschränkungen wahrscheinlich nicht betroffen.
Weitere Informationen zur empfohlenen Alternative zum Starten von Aktivitäten im Hintergrund findest du im Leitfaden zum Benachrichtigen von Nutzern über zeitkritische Ereignisse in deiner App.
Kennungen und Daten
In diesem Abschnitt werden Änderungen aufgeführt, die sich speziell auf die Arbeit mit Gerätekennungen und ‑daten beziehen.
Entfernung der Kontakthäufigkeit
Ab Android 10 werden auf der Plattform keine Informationen zur Affinität von Kontakten mehr gespeichert. Wenn deine App also eine Suche in den Kontakten des Nutzers durchführt, werden die Ergebnisse nicht nach der Häufigkeit der Interaktion sortiert.
Der Leitfaden zu ContactsProvider enthält einen Hinweis, in dem die spezifischen Felder und Methoden beschrieben werden, die ab Android 10 auf allen Geräten veraltet sind.
MAC-Adressen-Randomisierung
Auf Geräten mit Android 10 oder höher überträgt das System standardmäßig zufällige MAC-Adressen.
Wenn Ihre App einen Anwendungsfall für Unternehmen verarbeitet, bietet die Plattform APIs für verschiedene Vorgänge im Zusammenhang mit MAC-Adressen:
- Zufällige MAC-Adresse abrufen:Device Owner- und Profile Owner-Apps können die zufällige MAC-Adresse, die einem bestimmten Netzwerk zugewiesen ist, durch Aufrufen von
getRandomizedMacAddress()abrufen. - Tatsächliche MAC-Adresse abrufen:Apps von Geräteeigentümern können die tatsächliche MAC-Adresse der Hardware eines Geräts abrufen, indem sie
getWifiMacAddress()aufrufen. Diese Methode ist nützlich, um Gerätepools zu verfolgen.
Einschränkung des Zugriffs auf das Dateisystem „/proc/net“
Auf Geräten mit Android 10 oder höher können Apps nicht auf /proc/net zugreifen, das Informationen zum Netzwerkstatus eines Geräts enthält. Apps, die Zugriff auf diese Informationen benötigen, z. B. VPNs, sollten die Klasse NetworkStatsManager oder ConnectivityManager verwenden.
Einschränkung für nicht rücksetzbare Geräte-IDs
Ab Android 10 benötigen Apps die privilegierte Berechtigung READ_PRIVILEGED_PHONE_STATE, um auf die nicht zurücksetzbaren Kennungen des Geräts zuzugreifen, einschließlich IMEI und Seriennummer.
Zu den betroffenen Methoden gehören:
BuildTelephonyManager
Wenn Ihre App nicht die Berechtigung hat und Sie trotzdem Informationen zu nicht zurücksetzbaren Kennungen anfordern, variiert die Antwort der Plattform je nach Ziel-SDK-Version:
- Wenn Ihre App auf Android 10 oder höher ausgerichtet ist, tritt ein
SecurityExceptionauf. - Wenn Ihre App auf Android 9 (API-Level 28) oder niedriger ausgerichtet ist, gibt die Methode
nulloder Platzhalterdaten zurück, wenn die App die BerechtigungREAD_PHONE_STATEhat. Andernfalls tritt einSecurityExceptionauf.
Für viele Anwendungsfälle sind nicht rücksetzbare Geräte-IDs nicht erforderlich. Wenn Ihre App beispielsweise nicht zurücksetzbare Geräte-IDs für das Anzeigen-Tracking oder die Nutzeranalyse verwendet, sollten Sie stattdessen für diese spezifischen Anwendungsfälle eine Android-Werbe-ID verwenden. Weitere Informationen finden Sie unter Best Practices für eindeutige Kennungen.
Eingeschränkter Zugriff auf Daten in der Zwischenablage
Wenn Ihre App nicht der standardmäßige Eingabemethoden-Editor (IME) ist oder die App, die derzeit im Fokus ist, kann sie unter Android 10 oder höher nicht auf Daten in der Zwischenablage zugreifen.
Schutz der Seriennummer von USB-Geräten
Wenn deine App auf Android 10 oder höher ausgerichtet ist, kann sie die Seriennummer erst lesen, wenn der Nutzer deiner App die Berechtigung zum Zugriff auf das USB-Gerät oder ‑Zubehör erteilt hat.
Weitere Informationen zum Arbeiten mit USB-Geräten finden Sie im Leitfaden zum Konfigurieren von USB-Hosts.
Kamera und Konnektivität
In diesem Abschnitt werden Änderungen aufgeführt, die sich speziell auf Kamera-Metadaten und Konnektivitäts-APIs beziehen.
Einschränkung des Zugriffs auf Kameradetails und ‑metadaten
In Android 10 wird der Umfang der Informationen geändert, die die Methode getCameraCharacteristics() standardmäßig zurückgibt. Insbesondere muss Ihre App die Berechtigung CAMERA haben, um auf potenziell gerätespezifische Metadaten zuzugreifen, die im Rückgabewert dieser Methode enthalten sind.
Weitere Informationen zu diesen Änderungen finden Sie im Abschnitt zu Kamerafeldern, für die eine Berechtigung erforderlich ist.
Einschränkung für das Aktivieren und Deaktivieren von WLAN
Apps, die auf Android 10 oder höher ausgerichtet sind, können WLAN nicht aktivieren oder deaktivieren. Die Methode WifiManager.setWifiEnabled() gibt immer false zurück.
Wenn du Nutzer auffordern musst, das WLAN zu aktivieren und zu deaktivieren, verwende ein Einstellungsfeld.
Einschränkungen für den direkten Zugriff auf konfigurierte WLANs
Zum Schutz der Privatsphäre der Nutzer ist die manuelle Konfiguration der Liste der WLANs auf System-Apps und Device Policy Controller (DPCs) beschränkt. Ein bestimmter DPC kann entweder der Geräteeigentümer oder der Profilinhaber sein.
Wenn Ihre App auf Android 10 oder höher ausgerichtet ist und es sich nicht um eine System-App oder einen DPC handelt, geben die folgenden Methoden keine nützlichen Daten zurück:
Die Methode
getConfiguredNetworks()gibt immer eine leere Liste zurück.Jede Methode für Netzwerkvorgänge, die einen Ganzzahlwert zurückgibt (
addNetwork()undupdateNetwork()), gibt immer -1 zurück.Jeder Netzwerkvorgang, der einen booleschen Wert zurückgibt (
removeNetwork(),reassociate(),enableNetwork(),disableNetwork(),reconnect()unddisconnect()), gibt immerfalsezurück.
Wenn deine App eine Verbindung zu WLANs herstellen muss, verwende die folgenden alternativen Methoden:
- Wenn Sie eine sofortige lokale Verbindung zu einem WLAN auslösen möchten, verwenden Sie
WifiNetworkSpecifierin einem standardmäßigenNetworkRequest-Objekt. - Wenn Sie WLANs hinzufügen möchten, die für den Internetzugriff des Nutzers infrage kommen, verwenden Sie
WifiNetworkSuggestion-Objekte. Sie können Netzwerke, die im Dialogfeld zur Auswahl des Netzwerks für die automatische Verbindung angezeigt werden, hinzufügen und entfernen, indem SieaddNetworkSuggestions()bzw.removeNetworkSuggestions()aufrufen. Für diese Methoden sind keine Berechtigungen zur Standortermittlung erforderlich.
Für einige Telefonie-, Bluetooth- und WLAN-APIs ist die Berechtigung zur genauen Standortermittlung erforderlich
Wenn Ihre App auf Android 10 oder höher ausgerichtet ist, muss sie die Berechtigung ACCESS_FINE_LOCATION haben, um mehrere Methoden in den WLAN-, Wi-Fi Aware- oder Bluetooth-APIs verwenden zu können. In den folgenden Abschnitten sind die betroffenen Klassen und Methoden aufgeführt.
Telefonie
TelephonyManagergetCellLocation()getAllCellInfo()requestNetworkScan()requestCellInfoUpdate()getAvailableNetworks()getServiceState()
TelephonyScanManagerrequestNetworkScan()
TelephonyScanManager.NetworkScanCallbackonResults()
PhoneStateListeneronCellLocationChanged()onCellInfoChanged()onServiceStateChanged()
WLAN
WifiManagerstartScan()getScanResults()getConnectionInfo()getConfiguredNetworks()
WifiAwareManagerWifiP2pManagerWifiRttManager
Bluetooth
BluetoothAdapterstartDiscovery()startLeScan()
BluetoothAdapter.LeScanCallbackBluetoothLeScannerstartScan()
Berechtigungen
In diesem Abschnitt werden Aktualisierungen des Android-Berechtigungsmodells beschrieben.
Eingeschränkter Zugriff auf Bildschirminhalte
Um die Bildschirminhalte der Nutzer zu schützen, verhindert Android 10 den unbemerkten Zugriff auf die Bildschirminhalte des Geräts, indem der Umfang der Berechtigungen READ_FRAME_BUFFER, CAPTURE_VIDEO_OUTPUT und CAPTURE_SECURE_VIDEO_OUTPUT geändert wird. Ab Android 10 sind diese Berechtigungen nur noch signature-access.
Apps, die auf die Bildschirminhalte des Geräts zugreifen müssen, sollten die MediaProjection API verwenden, die eine Aufforderung zur Einwilligung des Nutzers anzeigt.
Für Nutzer sichtbare Berechtigungsprüfung bei älteren Apps
Wenn Ihre App auf Android 5.1 (API-Level 22) oder niedriger ausgerichtet ist, wird Nutzern ein Berechtigungsbildschirm angezeigt, wenn sie Ihre App zum ersten Mal auf einem Gerät mit Android 10 oder höher verwenden (siehe Abbildung 1). Auf diesem Bildschirm können Nutzer Berechtigungen widerrufen, die das System Ihrer App zuvor bei der Installation gewährt hat.
Erkennung körperlicher Aktivitäten
In Android 10 wird die Laufzeitberechtigung android.permission.ACTIVITY_RECOGNITION für Apps eingeführt, die die Schrittzahl des Nutzers ermitteln oder die körperliche Aktivität des Nutzers klassifizieren müssen, z. B. Gehen, Radfahren oder Fortbewegung in einem Fahrzeug. So können Nutzer in den Einstellungen sehen, wie die Sensordaten des Geräts verwendet werden.
Einige Bibliotheken in den Google Play-Diensten, z. B. die Activity Recognition API und die Google Fit API, liefern nur dann Ergebnisse, wenn der Nutzer deiner App diese Berechtigung erteilt hat.
Die einzigen integrierten Sensoren auf dem Gerät, für die Sie diese Berechtigung deklarieren müssen, sind die Sensoren Schrittzähler und Schritterkennung.
Wenn Ihre App auf Android 9 (API-Level 28) oder niedriger ausgerichtet ist, gewährt das System Ihrer App die Berechtigung android.permission.ACTIVITY_RECOGNITION automatisch, sofern sie die folgenden Bedingungen erfüllt:
- Die Manifestdatei enthält die Berechtigung
com.google.android.gms.permission.ACTIVITY_RECOGNITION. - Die Manifestdatei enthält die Berechtigung
android.permission.ACTIVITY_RECOGNITIONnicht.
Wenn das System die Berechtigung android.permission.ACTIVITY_RECOGNITION automatisch gewährt, behält Ihre App die Berechtigung, nachdem Sie Ihre App auf Android 10 aktualisiert haben. Der Nutzer kann diese Berechtigung jedoch jederzeit in den Systemeinstellungen widerrufen.
Berechtigungsgruppen aus der Benutzeroberfläche entfernt
Ab Android 10 können Apps nicht mehr nachsehen, wie Berechtigungen in der Benutzeroberfläche gruppiert sind.