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 erhöhen die Transparenz und Kontrolle für Nutzer über ihre Daten und die Funktionen, die sie Anwendungen gewähren. Diese Funktionen können bedeuten, dass sich bestimmte Verhaltensweisen oder Daten, von denen deine App abhängig ist, im Vergleich zu älteren Versionen der Plattform anders verhalten können. Die Auswirkungen auf Ihre Anwendung sollten minimal sein, wenn sie den aktuellen Best Practices für den Umgang mit Nutzerdaten entspricht.
Auf dieser Seite finden Sie eine Zusammenfassung jeder Änderung.
Wichtigste Änderungen
In diesem Abschnitt werden die wichtigsten Änderungen in Bezug auf den Datenschutz in Android 10 beschrieben.
Externer Speicherzugriff für Anwendungsdateien und Medien
Standardmäßig erhalten Apps, die auf Android 10 und höher ausgerichtet sind, eingeschränkten Zugriff auf externen Speicher bzw. begrenzten Speicher. Solche Anwendungen können die folgenden Dateitypen auf einem externen Speichergerät abrufen, ohne dass speicherbezogene Nutzerberechtigungen angefordert werden 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.
Für den Zugriff auf den Gerätestandort im Hintergrund ist eine Berechtigung erforderlich
Um Nutzern zusätzliche Kontrolle über den Zugriff einer App auf Standortinformationen zu geben, 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 Anwendung auf den Standort aus, wenn sie im Hintergrund ausgeführt wird. Es wird davon ausgegangen, dass eine App im Hintergrund auf den Standort zugreift, sofern keine der folgenden Bedingungen erfüllt ist:
- Eine Aktivität der App ist sichtbar.
Die App führt einen Dienst im Vordergrund aus, der den Typ des Diensts im Vordergrund von
location
deklariert hat.Wenn du den Typ des Diensts im Vordergrund für einen Dienst in deiner App deklarieren möchtest, setze den
targetSdkVersion
odercompileSdkVersion
deiner App auf29
oder höher. Weitere Informationen dazu, wie Dienste im Vordergrund von Nutzern initiierte 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 bei Ausrichtung auf Android 9 oder niedriger automatisch gewährt
Wenn Ihre App unter Android 10 oder höher läuft, aber auf Android 9 (API-Level 28) oder niedriger ausgerichtet ist, gilt für die Plattform Folgendes:
- Wenn in deiner App ein
<uses-permission>
-Element fürACCESS_FINE_LOCATION
oderACCESS_COARSE_LOCATION
deklariert ist, 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 nach Upgrade auf Android 10
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 Ihre App erhält. Welche Berechtigungen Ihre App nach dem Upgrade erhält, hängen von der SDK-Zielversion und den definierten Berechtigungen ab, wie in der folgenden Tabelle dargestellt:
Zielplattformversion | Grob oder feine Berechtigung erteilt? |
Hintergrundberechtigung im Manifest definiert? |
Aktualisierter Standardberechtigungsstatus |
---|---|---|---|
Android 10 | Ja | Ja | Vordergrund- und Hintergrundzugriff |
Android 10 | Ja | Nein | Nur Zugriff auf Vordergrund |
Android 10 | Nein | (vom System ignoriert) | Kein Zugriff |
Android 9 oder niedriger | Ja | Wird beim Upgrade des Geräts automatisch vom System hinzugefügt | Vordergrund- und Hintergrundzugriff |
Android 9 oder niedriger | Nein | (vom System ignoriert) | Kein Zugriff |
Der Nutzer kann diese Zugriffsebene ändern, auch nachdem das System den Zugriff Ihrer App auf den Gerätestandort automatisch aktualisiert hat. Der Nutzer kann beispielsweise den Zugriff Ihrer App nur auf den Vordergrund einschränken oder den Zugriff vollständig widerrufen. Bevor Sie versuchen, auf den Standort des Geräts zuzugreifen, insbesondere innerhalb eines Dienstes im Vordergrund, sollte Ihre App prüfen, ob der Nutzer weiterhin erlaubt, dass Ihre App diese Standortinformationen empfängt.
Zugriff nach Aktualisierung des Ziel-API-Levels auf Android 10-Geräten entzogen
Angenommen, Ihre App ist bereits auf einem Gerät mit Android 10 installiert. Wenn du deine App in diesem Fall auf Android 10 aktualisierst, widerruft das Gerät die Berechtigung ACCESS_BACKGROUND_LOCATION
.
Weitere Informationen zum Abrufen des Gerätestandorts, während die App im Hintergrund ausgeführt wird, findest du in der Anleitung zum Empfangen von regelmäßigen Standortupdates.
Einschränkungen beim Starten von Aktivitäten im Hintergrund
Ab Android 10 wird das Starten von Aktivitäten im Hintergrund eingeschränkt. 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, 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 bei zeitkritischen Ereignissen in Ihrer App.
Kennungen und Daten
In diesem Abschnitt werden die Änderungen aufgeführt, die sich speziell auf die Verwendung von Gerätekennungen und -daten beziehen.
Entfernen der gemeinsamen Kontakte
Ab Android 10 erfasst die Plattform keine Affinitätsinformationen zu Kontakten mehr. Wenn Ihre Anwendung eine Suche in den Kontakten des Nutzers durchführt, werden die Ergebnisse daher nicht nach der Häufigkeit der Interaktion sortiert.
Die Anleitung zu ContactsProvider
enthält einen Hinweis zu den Feldern und Methoden, die auf allen Geräten mit Android 10 veraltet sind.
Randomisierung der MAC-Adresse
Auf Geräten mit Android 10 oder höher überträgt das System standardmäßig randomisierte MAC-Adressen.
Wenn Ihre Anwendung für einen Anwendungsfall in Unternehmen ausgelegt ist, bietet die Plattform APIs für verschiedene Vorgänge im Zusammenhang mit MAC-Adressen:
- Zufällige MAC-Adresse abrufen:Apps von Geräteinhabern und Profilinhaber-Apps können die zufällige MAC-Adresse, die einem bestimmten Netzwerk zugewiesen ist, über
getRandomizedMacAddress()
abrufen. - Tatsächliche MAC-Adresse im Werk abrufen:Apps von Geräteeigentümern können die tatsächliche Hardware-MAC-Adresse eines Geräts abrufen, indem sie
getWifiMacAddress()
aufrufen. Diese Methode ist nützlich, um mehrere Gerätepools zu verfolgen.
Zugriffsbeschränkung auf das Dateisystem /proc/net
Auf Geräten mit Android 10 oder höher können Apps nicht auf /proc/net
zugreifen, einschließlich Informationen zum Netzwerkstatus eines Geräts. Anwendungen, 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 privilegierte READ_PRIVILEGED_PHONE_STATE
-Berechtigung, um auf die nicht zurücksetzbaren IDs des Geräts zugreifen zu können, die sowohl die IMEI als auch die Seriennummer enthalten.
Folgende Methoden sind betroffen:
Build
TelephonyManager
Wenn Ihre App nicht die erforderliche Berechtigung hat und trotzdem Informationen zu nicht rücksetzbaren Kennungen abfragen, variiert die Antwort der Plattform je nach SDK-Zielversion:
- Wenn Ihre App auf Android 10 oder höher ausgerichtet ist, wird
SecurityException
angezeigt. - 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 rücksetzbare Geräte-IDs für das Anzeigen-Tracking oder Nutzeranalysen verwendet werden, verwenden Sie stattdessen eine Android-Werbe-ID für diese speziellen Anwendungsfälle. Weitere Informationen finden Sie in den Best Practices für eindeutige IDs.
Eingeschränkter Zugriff auf Daten in der Zwischenablage
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 deine App auf Android 10 oder höher ausgerichtet ist, kann sie die Seriennummer erst lesen, wenn der Nutzer deiner App die Berechtigung erteilt hat, auf das USB-Gerät oder das USB-Zubehör zuzugreifen.
Weitere Informationen zur Arbeit mit USB-Geräten finden Sie in der Anleitung zur Konfiguration von USB-Hosts.
Kamera und Konnektivität
In diesem Abschnitt werden die Änderungen aufgeführt, die sich speziell auf Kamerametadaten und Konnektivitäts-APIs beziehen.
Beschränkung des Zugriffs auf Kameradetails und -metadaten
Android 10 ändert den Umfang der Informationen, die die Methode getCameraCharacteristics()
standardmäßig zurückgibt. Ihre App muss insbesondere die Berechtigung CAMERA
haben, um auf potenziell gerätespezifische Metadaten zugreifen zu können, 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üssen, das WLAN zu aktivieren und zu deaktivieren, verwenden Sie einen Einstellungsbereich.
Einschränkungen für den direkten Zugriff auf konfigurierte WLANs
Aus Datenschutzgründen ist die manuelle Konfiguration der Liste von WLANs auf System-Apps und Device Policy Controller (DPCs) beschränkt. Ein bestimmter DPC kann entweder der Geräteinhaber oder der Profilinhaber sein.
Wenn Ihre App auf Android 10 oder höher ausgerichtet ist und keine System-App oder ein DPC ist, werden über die folgenden Methoden keine nützlichen Daten zurückgegeben:
Die Methode
getConfiguredNetworks()
gibt immer eine leere Liste zurück.Jede Netzwerkvorgangsmethode, die einen ganzzahligen Wert –
addNetwork()
undupdateNetwork()
– zurückgibt, gibt immer -1 zurück.Jeder Netzwerkvorgang, 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, können Sie die folgenden alternativen Methoden verwenden:
- Verwenden Sie
WifiNetworkSpecifier
in einemNetworkRequest
-Standardobjekt, um eine sofortige lokale Verbindung mit einem WLAN auszulösen. - Wenn Sie WLANs für den Internetzugang für Nutzer hinzufügen möchten, verwenden Sie
WifiNetworkSuggestion
-Objekte. Sie können Netzwerke hinzufügen und entfernen, die im Dialogfeld zur Netzwerkauswahl automatisch verbunden werden. Dazu rufen SieaddNetworkSuggestions()
bzw.removeNetworkSuggestions()
auf. Für diese Methoden sind keine Berechtigungen zur Standortermittlung erforderlich.
Für einige Telefonie-, Bluetooth- und Wi-Fi-APIs ist eine Berechtigung zur Standortermittlung erforderlich
Wenn Ihre App auf Android 10 oder höher ausgerichtet ist, muss sie die Berechtigung ACCESS_FINE_LOCATION
haben, um verschiedene Methoden innerhalb der Wi-Fi Aware- oder Bluetooth-APIs verwenden zu können. In den folgenden Abschnitten sind 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
Zum Schutz der Bildschirminhalte von Nutzern verhindert Android 10 den stillen 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.
Berechtigungsprüfung für Nutzer bei älteren Apps
Wenn deine App auf Android 5.1 (API-Level 22) oder niedriger ausgerichtet ist, wird Nutzern ein Berechtigungsbildschirm angezeigt, wenn sie sie zum ersten Mal auf einem Gerät mit Android 10 oder höher verwenden (siehe Abbildung 1). Auf diesem Bildschirm haben Nutzer die Möglichkeit, den Zugriff auf Berechtigungen zu widerrufen, die das System Ihrer App bei der Installation zuvor 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 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 Google Play-Diensten wie die Activity Recognition API und die Google Fit API liefern nur Ergebnisse, wenn der Nutzer deiner 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 deine App auf Android 9 (API-Level 28) oder niedriger ausgerichtet ist, gewährt das System deiner App bei Bedarf automatisch die Berechtigung android.permission.ACTIVITY_RECOGNITION
, sofern sie jede der 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 diese Berechtigung auch, nachdem Sie Ihre App auf Android 10 aktualisiert 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.