Mit 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 Berechtigungen haben, die sie Apps erteilen. 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 Ihre App den aktuellen Best Practices für den Umgang mit Nutzerdaten entspricht.
Auf dieser Seite finden Sie eine Zusammenfassung der einzelnen Änderungen.
Wichtigste Änderungen
In diesem Abschnitt werden die wichtigsten Änderungen in Android 10 im Zusammenhang mit dem 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, eingeschränkten Zugriff auf externen Speicher oder eingeschränkten Speicher. 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 von der App aus dem Medienspeicher erstellt wurden.
Weitere Informationen zu Scoped Storage sowie zum Freigeben, Aufrufen und Ändern von Dateien, die auf externen Speichergeräten gespeichert sind, finden Sie in den Anleitungen zum Verwalten von Dateien auf externen Speichermedien und zum Aufrufen und Ändern von Mediendateien.
Zugriff auf den Gerätestandort im Hintergrund erfordert eine Berechtigung
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 den Standort im Hintergrund zu, sofern nicht eine der folgenden Bedingungen erfüllt ist:
- Eine Aktivität, die zur App gehört, ist sichtbar.
Die App führt einen Dienst im Vordergrund aus, für den der Typ von Dienst im Vordergrund
location
deklariert wurde.Wenn Sie den Typ des Dienstes im Vordergrund für einen Dienst in Ihrer App deklarieren möchten, legen Sie
targetSdkVersion
odercompileSdkVersion
Ihrer App auf29
oder höher fest. Weitere Informationen dazu, wie Dienste im Vordergrund nutzerinitiierte Aktionen fortsetzen können, die Zugriff auf den Standort erfordern.
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 erfolgt
Wenn Ihre App unter Android 10 oder höher ausgeführt wird, aber auf Android 9 (API‑Level 28) oder niedriger ausgerichtet ist, wendet die Plattform das folgende Verhalten an:
- Wenn in Ihrer App ein
<uses-permission>
-Element fürACCESS_FINE_LOCATION
oderACCESS_COARSE_LOCATION
deklariert wird, fügt das System während der Installation automatisch ein<uses-permission>
-Element fürACCESS_BACKGROUND_LOCATION
hinzu. - Wenn Ihre App entweder
ACCESS_FINE_LOCATION
oderACCESS_COARSE_LOCATION
anfordert, fügt das System der Anfrage automatischACCESS_BACKGROUND_LOCATION
hinzu.
Zugriff nach dem Upgrade des Geräts auf Android 10
Wenn ein Nutzer Ihrer App Zugriff auf den Gerätestandort gewährt – entweder ACCESS_COARSE_LOCATION
oder ACCESS_FINE_LOCATION
– und sein Gerät dann von Android 9 auf Android 10 aktualisiert, aktualisiert das System automatisch die Gruppe der standortbezogenen 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:
Tabelle 1 Änderungen des Berechtigungsstatus für den Standort nach dem Upgrade eines Geräts auf Android 10
Zielplattformversion | Berechtigung zur Ermittlung des groben oder genauen Standorts erteilt? |
Ist die Hintergrundberechtigung im Manifest definiert? |
Aktualisierter Standardberechtigungsstatus |
---|---|---|---|
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äte-Upgrade automatisch hinzugefügt | Vordergrund- und Hintergrundzugriff |
Android 9 oder niedriger | Nein | (Vom System ignoriert) | Kein Zugriff |
Der Nutzer kann diese Zugriffsebene auch dann ä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 den Zugriff vollständig widerrufen. Bevor Ihre App auf den Standort des Geräts zugreift, insbesondere in einem Dienst im Vordergrund, sollte sie prüfen, ob der Nutzer ihr weiterhin erlaubt, diese Standortdaten zu empfangen.
Zugriff wird beim Aktualisieren des Ziel-API-Levels auf Android 10-Geräten widerrufen
Angenommen, Ihre App ist bereits auf einem Gerät mit Android 10 installiert. Wenn Sie Ihre App in dieser Situation 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 Standortupdates.
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 hat mehr Kontrolle darüber, was auf seinem Bildschirm angezeigt wird. Solange Ihre App Aktivitäten als direkte Folge einer Nutzerinteraktion startet, ist sie höchstwahrscheinlich nicht von diesen Einschränkungen betroffen.
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 Arbeit mit Geräte-IDs und ‑daten beziehen.
Entfernen der Kontaktaffinität
Ab Android 10 werden keine Informationen zur Kontaktaffinität mehr auf der Plattform gespeichert. Wenn Ihre App eine Suche in den Kontakten des Nutzers durchführt, werden die Ergebnisse daher nicht nach 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‑Adress‑Randomisierung
Auf Geräten mit Android 10 oder höher werden standardmäßig zufällige MAC-Adressen übertragen.
Wenn Ihre App einen Anwendungsfall für Unternehmen abdeckt, bietet die Plattform APIs für mehrere Vorgänge im Zusammenhang mit MAC-Adressen:
- Zufällige MAC-Adresse abrufen:Apps des Geräteinhabers und Apps des Profilinhabers können die zufällige MAC-Adresse, die einem bestimmten Netzwerk zugewiesen ist, durch Aufrufen von
getRandomizedMacAddress()
abrufen. - Tatsächliche werkseitige MAC-Adresse abrufen:Geräteinhaber-Apps können die tatsächliche Hardware-MAC-Adresse eines Geräts abrufen, indem sie
getWifiMacAddress()
aufrufen. Diese Methode ist nützlich, um Geräteflotten zu verfolgen.
Einschränkung des Zugriffs auf das /proc/net-Dateisystem
Auf Geräten mit Android 10 oder höher können Apps nicht auf /proc/net
zugreifen, was auch Informationen zum Netzwerkstatus eines Geräts umfasst. 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 Berechtigung READ_PRIVILEGED_PHONE_STATE
, um auf die nicht zurücksetzbaren Kennungen des Geräts zuzugreifen, zu denen sowohl die IMEI als auch die Seriennummer gehören.
Folgende Methoden sind betroffen:
Build
TelephonyManager
Wenn Ihre App nicht über die Berechtigung verfügt 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
SecurityException
auf. - 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.
Für viele Anwendungsfälle sind nicht rücksetzbare Geräte-IDs nicht erforderlich. Wenn Ihre App beispielsweise nicht zurücksetzbare Gerätekennungen für das Anzeigen-Tracking oder die Nutzeranalyse verwendet, verwenden Sie stattdessen eine Android-Werbe-ID für diese speziellen Anwendungsfälle. Weitere Informationen
Eingeschränkter Zugriff auf Zwischenablagedaten
Sofern Ihre App nicht der standardmäßige IME (Input Method Editor) ist oder derzeit den Fokus hat, kann sie unter Android 10 oder höher nicht auf Daten in der Zwischenablage zugreifen.
Schutz der Seriennummer von USB-Geräten
Wenn Ihre App für Android 10 oder höher entwickelt wurde, kann sie die Seriennummer erst lesen, wenn der Nutzer Ihrer App die Berechtigung zum Zugriff auf das USB-Gerät oder ‑Zubehör gewährt hat.
Weitere Informationen zum Arbeiten 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 Kamera-Metadaten und Konnektivitäts-APIs beziehen.
Einschränkung des Zugriffs auf Kameradetails und ‑metadaten
In Android 10 wird der Umfang der Informationen, die von der Methode getCameraCharacteristics()
standardmäßig zurückgegeben werden, geändert. Ihre App muss insbesondere 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 Kamerafelder, für die eine Berechtigung erforderlich ist.
Einschränkung beim 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 Sie Nutzer auffordern müssen, WLAN zu aktivieren und zu deaktivieren, verwenden Sie ein Einstellungsfeld.
Einschränkungen des direkten Zugriffs auf konfigurierte WLANs
Zum Schutz der Nutzerdaten ist die manuelle Konfiguration der Liste der WLANs auf System-Apps und Geräterichtliniencontroller (Device Policy Controllers, DPCs) beschränkt. Ein bestimmtes 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 ein DPC handelt, geben die folgenden Methoden keine nützlichen Daten zurück:
Die Methode
getConfiguredNetworks()
gibt immer eine leere Liste zurück.Jede Netzwerkoperationsmethode, die einen Ganzzahlwert zurückgibt –
addNetwork()
undupdateNetwork()
– gibt immer -1 zurück.Jeder Netzwerkbetrieb, der einen booleschen Wert zurückgibt –
removeNetwork()
,reassociate()
,enableNetwork()
,disableNetwork()
,reconnect()
unddisconnect()
– gibt immerfalse
zurück.
Wenn Ihre App eine Verbindung zu WLANs herstellen muss, verwenden Sie die folgenden alternativen Methoden:
- Verwenden Sie
WifiNetworkSpecifier
in einem Standardobjekt vom TypNetworkRequest
, um eine sofortige lokale Verbindung zu einem WLAN herzustellen. - 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 Standortberechtigungen erforderlich.
Für einige Telefonie-, Bluetooth- und WLAN-APIs ist die Berechtigung „Genauer Standort“ 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 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 Änderungen am Android-Berechtigungsmodell beschrieben.
Eingeschränkter Zugriff auf Bildschirminhalte
Um die Bildschirminhalte von Nutzern zu schützen, verhindert Android 10 den stillen 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 den Bildschirminhalt des Geräts zugreifen müssen, sollten die MediaProjection
-API verwenden. Dadurch wird eine Aufforderung angezeigt, in der der Nutzer um seine Einwilligung gebeten wird.
Nutzerorientierte Berechtigungsprüfung bei Legacy-Apps
Wenn Ihre App für Android 5.1 (API-Level 22) oder niedriger vorgesehen ist, sehen Nutzer beim ersten Verwenden Ihrer App auf einem Gerät mit Android 10 oder höher einen Berechtigungsbildschirm (siehe Abbildung 1). Auf diesem Bildschirm können Nutzer den Zugriff auf Berechtigungen widerrufen, die das System Ihrer App bei der Installation gewährt hat.
Erkennung körperlicher Aktivität
In Android 10 wird die Laufzeitberechtigung android.permission.ACTIVITY_RECOGNITION
für Apps eingeführt, die die Schrittzahl des Nutzers erfassen oder die körperliche Aktivität des Nutzers klassifizieren müssen, z. B. Gehen, Radfahren oder Autofahren. So können Nutzer in den Einstellungen sehen, wie Gerätesensordaten verwendet werden.
Für einige Bibliotheken in den Google Play-Diensten, z. B. die Activity Recognition API und die Google Fit API, werden nur dann Ergebnisse bereitgestellt, wenn der Nutzer Ihrer 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 Schrittdetektor.
Wenn Ihre App auf Android 9 (API-Level 28) oder niedriger ausgerichtet ist, erteilt das System Ihrer App bei Bedarf automatisch die Berechtigung android.permission.ACTIVITY_RECOGNITION
, wenn Ihre App die 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 bei, nachdem Sie sie für 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 werden.