Android 10 (API-Level 29) führt eine Reihe von Funktionen und Verhaltensänderungen ein, um die Privatsphäre der Nutzer besser zu schützen. Mit diesen Änderungen erhalten Nutzer mehr Transparenz und Kontrolle über ihre Daten und die Funktionen, die sie Apps gewähren. Diese Funktionen können dazu führen, dass sich bestimmte Verhaltensweisen oder Daten, von denen Ihre App abhängt, im Vergleich zu älteren Versionen der Plattform anders verhalten. Die Auswirkungen auf Ihre App sollten minimal sein, wenn Sie die aktuellen Best Practices für den Umgang mit Nutzerdaten einhalten.
Auf dieser Seite finden Sie eine Zusammenfassung jeder Änderung.
Wichtigste Änderungen
In diesem Abschnitt finden Sie die wichtigsten Änderungen in Android 10 im Hinblick auf den Datenschutz.
Zugriff auf externen Speicher auf App-Dateien und -Medien beschränkt
Standardmäßig erhalten Apps, die auf Android 10 und höher ausgerichtet sind, einen befristeten Zugriff auf den externen Speicher oder einen befristeten Speicher. Solche Apps können die folgenden Dateitypen auf einem externen Speichergerät sehen, ohne dass sie speicherbezogene Nutzerberechtigungen anfordern müssen:
- Dateien im anwendungsspezifischen Verzeichnis, auf die mit
getExternalFilesDir()
zugegriffen wird. - Fotos, Videos und Audioclips, die von der App im Medienspeicher erstellt wurden.
Weitere Informationen zum begrenzten Speicher und zum Freigeben, Zugreifen und Ändern von Dateien, die auf externen Speichergeräten gespeichert sind, finden Sie in den Leitfäden Dateien im externen Speicher verwalten und Mediendateien aufrufen und ändern.
Zugriff auf den Gerätestandort im Hintergrund erfordert Berechtigung
Unter Android 10 wird die Berechtigung ACCESS_BACKGROUND_LOCATION
eingeführt, um Nutzern mehr Kontrolle über den Zugriff einer App auf Standortinformationen zu geben.
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 die Standortermittlung aus, wenn sie im Hintergrund ausgeführt wird. Eine App gilt als App, die im Hintergrund auf die Standortermittlung zugreift, es sei denn, eine der folgenden Bedingungen ist erfüllt:
- Eine Aktivität, die zur App gehört, ist sichtbar.
In der App wird ein Dienst im Vordergrund ausgeführt, für den ein Typ von Dienst im Vordergrund von
location
deklariert wurde.Wenn Sie den Typ des Dienstes im Vordergrund für einen Dienst in Ihrer App deklarieren möchten, setzen Sie
targetSdkVersion
odercompileSdkVersion
Ihrer App auf29
oder höher. Weitere Informationen dazu, wie Dienste im Vordergrund von Nutzern initiierte Aktionen fortsetzen können, für die der 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 das Targeting auf Android 9 oder niedriger festgelegt ist
Wenn Ihre App auf Android 10 oder höher ausgeführt wird, aber auf Android 9 (API-Level 28) oder niedriger ausgerichtet ist, gilt auf der Plattform das folgende Verhalten:
- Wenn Ihre App ein
<uses-permission>
-Element fürACCESS_FINE_LOCATION
oderACCESS_COARSE_LOCATION
deklariert, fügt das System während der Installation automatisch ein<uses-permission>
-Element fürACCESS_BACKGROUND_LOCATION
hinzu. - Wenn Ihre Anwendung entweder
ACCESS_FINE_LOCATION
oderACCESS_COARSE_LOCATION
anfordert, fügt das System der Anfrage automatischACCESS_BACKGROUND_LOCATION
hinzu.
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 sein Gerät von Android 9 auf Android 10 aktualisiert, aktualisiert das System automatisch die Standortbasierten Berechtigungen, die Ihrer App gewährt wurden. Welche Berechtigungen Ihre App nach dem Upgrade erhält, hängt von der Ziel-SDK-Version und den definierten Berechtigungen ab, wie in der folgenden Tabelle dargestellt:
Version der Zielplattform | Wurde die grobe oder die genaue Berechtigung gewährt? |
Hintergrundberechtigung im Manifest definiert? |
Aktualisierter Standardberechtigungsstatus |
---|---|---|---|
Android 10 | Ja | Ja | Vordergrund- und Hintergrundzugriff |
Android 10 | Ja | Nein | Nur im Vordergrund |
Android 10 | Nein | (Vom System ignoriert) | Kein Zugriff |
Android 9 oder niedriger | Ja | Wird vom System beim Geräteupgrade automatisch hinzugefügt | Zugriff im Vordergrund und im Hintergrund |
Android 9 oder niedriger | Nein | (Vom System ignoriert) | Kein Zugriff |
Hinweis: Der Nutzer kann diese Zugriffsebene auch ändern, nachdem das System den Zugriff Ihrer App auf den Gerätestandort automatisch aktualisiert hat. Der Nutzer kann beispielsweise den Zugriff Ihrer App auf den Vordergrund beschränken oder vollständig widerrufen. Bevor Ihre App versucht, auf den Standort des Geräts zuzugreifen, insbesondere in einem Dienst im Vordergrund, sollte sie prüfen, ob der Nutzer Ihrer App weiterhin erlaubt, diese Standortinformationen zu erhalten.
Zugriff wird widerrufen, wenn das Ziel-API-Level auf Android 10-Geräten aktualisiert wird
Angenommen, Ihre App ist bereits auf einem Gerät mit Android 10 installiert. Wenn Sie Ihre App in diesem Fall auf Android 10 ausrichten, wird die Berechtigung ACCESS_BACKGROUND_LOCATION
auf dem Gerät widerrufen.
Weitere Informationen zum Abrufen des Gerätestandorts, während Ihre App im Hintergrund ausgeführt wird, finden Sie im Leitfaden zum Empfangen regelmäßiger Standortaktualisierungen.
Einschränkungen beim Starten von Aktivitäten im Hintergrund
Ab Android 10 gelten Einschränkungen für das Starten von Aktivitäten im Hintergrund. Durch diese Verhaltensänderung werden Unterbrechungen für den Nutzer minimiert und er behält mehr Kontrolle darüber, was auf seinem Bildschirm angezeigt wird. Solange Ihre App Aktivitäten als direkte Folge einer Nutzerinteraktion startet, sind diese Einschränkungen für Ihre App höchstwahrscheinlich nicht relevant.
Weitere Informationen zur empfohlenen Alternative zum Starten von Aktivitäten im Hintergrund finden Sie im Leitfaden zum Benachrichtigen von Nutzern über zeitkritische Ereignisse in Ihrer App.
Kennungen und Daten
In diesem Abschnitt werden Änderungen aufgeführt, die sich speziell auf die Verwendung von Geräte-IDs und ‑Daten beziehen.
Entfernung der Kontaktaffinität
Ab Android 10 werden auf der Plattform keine Informationen zur Affinität von Kontakten mehr erfasst. Wenn Ihre App also eine Suche in den Kontakten des Nutzers durchführt, werden die Ergebnisse nicht nach Häufigkeit der Interaktion sortiert.
Der Leitfaden zu ContactsProvider
enthält eine Benachrichtigung, in der die Felder und Methoden beschrieben werden, die auf allen Geräten ab Android 10 nicht mehr unterstützt werden.
Zufallsgenerierung von MAC-Adressen
Auf Geräten mit Android 10 oder höher überträgt das System standardmäßig randomisierte MAC-Adressen.
Wenn Ihre App einen Greifautomaten-Use-Case verarbeitet, bietet die Plattform APIs für verschiedene Vorgänge im Zusammenhang mit MAC-Adressen:
- Zufällige MAC-Adresse abrufen:Apps vom Typ „Geräteeigentümer“ und „Profilinhaber“ können die zufällige MAC-Adresse abrufen, die einem bestimmten Netzwerk zugewiesen ist. Dazu müssen sie
getRandomizedMacAddress()
aufrufen. - Aktuelle MAC-Adresse des Herstellers abrufen:Apps von Geräteeigentümern können die MAC-Adresse der Hardware eines Geräts abrufen, indem sie
getWifiMacAddress()
aufrufen. Diese Methode eignet sich zum Nachverfolgen von Geräteflotten.
Zugriffsbeschränkung 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.
Beschränkung für nicht rücksetzbare Geräte-IDs
Ab Android 10 benötigen Apps die Berechtigung READ_PRIVILEGED_PHONE_STATE
, um auf die nicht zurücksetzbaren IDs des Geräts zuzugreifen, einschließlich IMEI und Seriennummer.
Zu den betroffenen Methoden gehören:
Build
TelephonyManager
Wenn Ihre App nicht über die Berechtigung verfügt und Sie trotzdem Informationen zu nicht zurücksetzbaren IDs anfordern, hängt die Antwort der Plattform von der Ziel-SDK-Version ab:
- Wenn Ihre App auf Android 10 oder höher ausgerichtet ist, wird eine
SecurityException
ausgegeben. - Wenn Ihre App auf Android 9 (API-Level 28) oder niedriger ausgerichtet ist, gibt die Methode
null
oder Platzhalterdaten zurück, wenn die App die BerechtigungREAD_PHONE_STATE
hat. Andernfalls tritt einSecurityException
auf.
In vielen Anwendungsfällen sind nicht rücksetzbare Geräte-IDs erforderlich. Wenn in Ihrer App beispielsweise nicht zurücksetzbare Gerätekennungen für das Anzeigen-Tracking oder die Nutzeranalyse verwendet werden, sollten Sie für diese Anwendungsfälle stattdessen eine Android-Werbe-ID verwenden. Weitere Informationen finden Sie unter Best Practices für eindeutige Kennungen.
Eingeschränkter Zugriff auf Zwischenablagedaten
Sofern es sich bei Ihrer App nicht um den standardmäßigen Eingabemethodeneditor (IME) oder um die App handelt, auf die der Fokus gerade liegt, kann sie unter Android 10 oder höher nicht auf Daten in der Zwischenablage zugreifen.
Schutz der Seriennummer des USB-Geräts
Wenn Ihre App auf Android 10 oder höher ausgerichtet ist, kann sie die Seriennummer erst lesen, wenn der Nutzer Ihrer App die Berechtigung zum Zugriff auf das USB-Gerät oder ‑Zubehör erteilt hat.
Weitere Informationen zur Arbeit mit USB-Geräten finden Sie in der Anleitung zum Konfigurieren von USB-Hosts.
Kamera und Konnektivität
In diesem Abschnitt werden Änderungen aufgeführt, die sich speziell auf Kamerametadaten und Konnektivitäts-APIs beziehen.
Zugriff auf Kameradetails und Metadaten eingeschränkt
Android 10 ändert den Umfang der Informationen, 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 beim Aktivieren und Deaktivieren von WLAN
Bei Apps, die auf Android 10 oder höher ausgerichtet sind, kann WLAN nicht aktiviert oder deaktiviert werden. Die Methode WifiManager.setWifiEnabled()
gibt immer false
zurück.
Wenn Sie Nutzer auffordern möchten, das WLAN zu aktivieren und zu deaktivieren, verwenden Sie ein Steuerfeld.
Einschränkungen für den direkten Zugriff auf konfigurierte WLANs
Zum Schutz des Datenschutzes ist die manuelle Konfiguration der Liste der WLANs auf System-Apps und Geräterichtliniencontroller (DPCs) beschränkt. Ein bestimmter DPC kann entweder der Geräteeigentümer oder der Profileigentümer sein.
Wenn Ihre App auf Android 10 oder höher ausgerichtet ist und keine System-App oder DPC ist, 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, also
addNetwork()
undupdateNetwork()
, gibt immer -1 zurück.Bei jedem Netzwerkvorgang, der einen booleschen Wert zurückgibt, wird immer
false
zurückgegeben:removeNetwork()
,reassociate()
,enableNetwork()
,disableNetwork()
,reconnect()
unddisconnect()
.
Wenn Ihre App eine Verbindung zu WLANs herstellen muss, verwenden Sie eine der folgenden alternativen Methoden:
- Wenn Sie eine sofortige lokale Verbindung zu einem WLAN herstellen möchten, verwenden Sie
WifiNetworkSpecifier
in 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 für die automatische Netzwerkverbindung 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 Wi‑Fi, Wi‑Fi Aware oder Bluetooth APIs verwenden zu können. In den folgenden Abschnitten werden die betroffenen Klassen und Methoden aufgeführt.
Telefonie
TelephonyManager
getCellLocation()
getAllCellInfo()
requestNetworkScan()
requestCellInfoUpdate()
getAvailableNetworks()
getServiceState()
TelephonyScanManager
requestNetworkScan()
TelephonyScanManager.NetworkScanCallback
onResults()
PhoneStateListener
onCellLocationChanged()
onCellInfoChanged()
onServiceStateChanged()
WLAN
WifiManager
startScan()
getScanResults()
getConnectionInfo()
getConfiguredNetworks()
WifiAwareManager
WifiP2pManager
WifiRttManager
Bluetooth
BluetoothAdapter
startDiscovery()
startLeScan()
BluetoothAdapter.LeScanCallback
BluetoothLeScanner
startScan()
Berechtigungen
In diesem Abschnitt werden die Aktualisierungen des Android-Berechtigungsmodells beschrieben.
Eingeschränkter Zugriff auf Bildschirminhalte
Um den Bildschirminhalt von Nutzern zu schützen, verhindert Android 10 den unbemerkten Zugriff auf den Bildschirminhalt 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 gelten diese Berechtigungen nur noch für signature-access.
Apps, die auf den Bildschirminhalt des Geräts zugreifen müssen, sollten die MediaProjection
API verwenden. Dabei wird der Nutzer aufgefordert, seine Einwilligung zu geben.
Nutzerfreundliche Berechtigungsprüfung für Legacy-Apps
Wenn Ihre App auf Android 5.1 (API-Ebene 22) oder niedriger ausgerichtet ist, sehen Nutzer einen Berechtigungsbildschirm, wenn sie Ihre App zum ersten Mal auf einem Gerät mit Android 10 oder höher verwenden, wie in Abbildung 1 dargestellt. Auf diesem Bildschirm haben Nutzer die Möglichkeit, den Zugriff auf Berechtigungen zu widerrufen, die das System deiner App bei der Installation zuvor 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 erkennen oder die körperliche Aktivität des Nutzers klassifizieren müssen, z. B. Gehen, Radfahren oder Bewegen in einem Fahrzeug. So können Nutzer sehen, wie Gerätesensordaten in den Einstellungen 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 Ihrer App diese Berechtigung erteilt hat.
Die einzigen integrierten Sensoren des Geräts, für die eine Erklärung dieser Berechtigung erforderlich ist, sind die Sensoren für Schrittzähler und Schrittdetektoren.
Wenn Ihre App auf Android 9 (API-Level 28) oder niedriger ausgerichtet ist, gewährt das System Ihrer App bei Bedarf automatisch die Berechtigung android.permission.ACTIVITY_RECOGNITION
, sofern Ihre App alle folgenden Bedingungen erfüllt:
- Die Manifestdatei enthält die Berechtigung
com.google.android.gms.permission.ACTIVITY_RECOGNITION
. - Die Manifestdatei enthält nicht die Berechtigung
android.permission.ACTIVITY_RECOGNITION
.
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 umgestellt haben. Der Nutzer kann diese Berechtigung jedoch jederzeit in den Systemeinstellungen widerrufen.
Berechtigungsgruppen wurden aus der Benutzeroberfläche entfernt
Ab Android 10 können Apps nicht mehr nachsehen, wie Berechtigungen in der UI gruppiert sind.