Android 10 (API-Level 29) bietet eine Reihe von Funktionen und Verhaltensänderungen, um die Privatsphäre der Nutzer besser zu schützen. Diese Änderungen erhöhen die Transparenz und Kontrolle, die Nutzer über ihre Daten und die Funktionen, die sie Apps zur Verfügung stellen, haben. Diese Funktionen können bedeuten, dass sich bestimmte Verhaltensweisen oder Daten Ihrer Anwendung im Vergleich zu älteren Versionen der Plattform anders verhalten. Die Auswirkungen auf Ihre App sollten minimal sein, wenn sie den aktuellen Best Practices für den Umgang mit Nutzerdaten folgt.
Diese Seite enthält eine Zusammenfassung der einzelnen Änderungen.
Wichtigste Änderungen
Dieser Abschnitt enthält die wichtigsten datenschutzbezogenen Änderungen bei Android 10.
Zugriff auf externen Speicher beschränkt auf Anwendungsdateien und Medien
Apps, die auf Android 10 und höher ausgerichtet sind, erhalten standardmäßig eingeschränkten Zugriff auf externen Speicher oder begrenzten Speicher. Solche Apps können die folgenden Dateitypen auf einem externen Speichergerät abrufen, ohne speicherbezogene Nutzerberechtigungen anfordern zu müssen:
- Dateien im anwendungsspezifischen Verzeichnis, auf das mit
getExternalFilesDir()
zugegriffen wird. - Fotos, Videos und Audioclips, die die App aus dem Media Store erstellt hat.
Weitere Informationen zu begrenztem Speicher sowie zum Freigeben, Zugreifen und Ändern von Dateien, die auf externen Speichergeräten gespeichert sind, finden Sie in den Leitfäden Dateien in externem Speicher verwalten und Auf Mediendateien zugreifen und diese ändern.
Für den Zugriff auf den Gerätestandort im Hintergrund ist eine Berechtigung erforderlich
Damit Nutzer mehr Kontrolle über den Zugriff einer App auf Standortdaten haben, führt Android 10 die Berechtigung ACCESS_BACKGROUND_LOCATION
ein.
Im Gegensatz zu den Berechtigungen ACCESS_FINE_LOCATION
und ACCESS_COARSE_LOCATION
wirkt sich die Berechtigung ACCESS_BACKGROUND_LOCATION
nur auf den Standortzugriff einer App aus, wenn sie im Hintergrund ausgeführt wird. Es wird davon ausgegangen, dass eine App im Hintergrund auf den Standort zugreift, sofern eine der folgenden Bedingungen nicht erfüllt ist:
- Eine Aktivität der App ist sichtbar.
Die App führt einen Dienst im Vordergrund aus, der als Dienst im Vordergrund den Typ
location
deklariert hat.Wenn Sie den Typ des Diensts 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 vom Nutzer initiierte Aktionen fortsetzen können, für die Zugriff auf den Standort erforderlich ist.
Wenn deine App Geofences erstellt und überwacht und auf Android 10 (API-Level 29) oder höher ausgerichtet ist, musst du die Berechtigung ACCESS_BACKGROUND_LOCATION
deklarieren.
Zugriff automatisch gewährt bei Ausrichtung auf Android 9 oder niedriger
Wenn deine App unter Android 10 oder höher ausgeführt wird, aber auf Android 9 (API-Level 28) oder niedriger ausgerichtet ist, wendet die Plattform folgendes Verhalten an:
- 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 App entweder
ACCESS_FINE_LOCATION
oderACCESS_COARSE_LOCATION
anfordert, fügt das System automatischACCESS_BACKGROUND_LOCATION
zur Anfrage hinzu.
Zugriff, wenn ein 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 werden. Die Berechtigungen, die Ihre App nach dem Upgrade erhält, hängt von der SDK-Zielversion und den definierten Berechtigungen ab, wie in der folgenden Tabelle gezeigt:
Version der Zielplattform | Grob oder feine Berechtigung gewährt? |
Hintergrundberechtigung im Manifest definiert? |
Aktualisierter Standardberechtigungsstatus |
---|---|---|---|
Android 10 | Ja | Ja | Zugriff im Vordergrund und Hintergrund |
Android 10 | Ja | Nein | Nur Zugriff 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 Hintergrund |
Android 9 oder niedriger | Nein | (vom System ignoriert) | Kein Zugriff |
Der Nutzer kann diese Zugriffsebene auch ändern, nachdem das System den Zugriff Ihrer App auf den Gerätestandort automatisch aktualisiert hat. Beispielsweise kann der Nutzer den Zugriff Ihrer Anwendung auf den Vordergrund einschränken oder den Zugriff ganz widerrufen. Bevor Sie versuchen, auf den Gerätestandort zuzugreifen (insbesondere in einem Dienst im Vordergrund), sollte Ihre App prüfen, ob der Nutzer diese Standortinformationen trotzdem zulässt.
Zugriff 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 du deine App in diesem Fall auf Android 10 anpasst, wird die Berechtigung ACCESS_BACKGROUND_LOCATION
vom Gerät widerrufen.
Weitere Informationen dazu, wie Sie den Gerätestandort abrufen, während Ihre App im Hintergrund ausgeführt wird, finden Sie in der Anleitung zum Empfangen regelmäßiger Standortupdates.
Einschränkungen für das Starten von Aktivitäten im Hintergrund
Ab Android 10 ist das Starten von Aktivitäten im Hintergrund eingeschränkt. Dadurch werden Unterbrechungen minimiert und Nutzer haben mehr Kontrolle darüber, was auf ihrem Bildschirm angezeigt wird. Solange Ihre App Aktivitäten als direkte Folge einer Nutzerinteraktion startet, ist Ihre App höchstwahrscheinlich nicht von diesen Einschränkungen betroffen.
Weitere Informationen zur empfohlenen Alternative zum Starten von Aktivitäten im Hintergrund findest du in der Anleitung zur Benachrichtigung von Nutzern über zeitkritische Ereignisse in deiner App.
Kennungen und Daten
In diesem Abschnitt sind die Änderungen aufgeführt, die sich speziell auf die Arbeit mit Gerätekennungen und -daten beziehen.
Entfernung von Affinität zu Kontakten
Ab Android 10 erfasst die Plattform keine Informationen zu gemeinsamen Interessen von Kontakten. Wenn Ihre App eine Suche nach 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 zu den spezifischen Feldern und Methoden, die auf allen Geräten ab Android 10 veraltet sind.
Zufällige Anordnung der MAC-Adresse
Auf Geräten mit Android 10 oder höher überträgt das System standardmäßig zufällig ausgewählte MAC-Adressen.
Wenn deine App einen Anwendungsfall für Unternehmen abwickelt, bietet die Plattform APIs für verschiedene Vorgänge im Zusammenhang mit MAC-Adressen:
- Zufällige MAC-Adresse abrufen:Apps des Geräteinhabers und Profilinhaber-Apps können die zufällige MAC-Adresse eines bestimmten Netzwerks durch Aufrufen von
getRandomizedMacAddress()
abrufen. - Tatsächliche MAC-Adresse (Werkadresse) abrufen:Apps des Geräteeigentümers können die tatsächliche Hardware-MAC-Adresse eines Geräts durch Aufrufen von
getWifiMacAddress()
abrufen. Diese Methode ist nützlich, um Geräteflotten 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 wie VPNs, die Zugriff auf diese Informationen benötigen, sollten die Klasse NetworkStatsManager
oder ConnectivityManager
verwenden.
Einschränkung für nicht rücksetzbare Geräte-IDs
Ab Android 10 müssen Apps die privilegierte Berechtigung READ_PRIVILEGED_PHONE_STATE
haben, um auf die nicht zurücksetzbaren Geräte-IDs wie die IMEI und die Seriennummer zugreifen zu können.
Folgende Methoden sind betroffen:
Build
TelephonyManager
Wenn Ihre App diese Berechtigung nicht hat und Sie trotzdem nach Informationen zu nicht rücksetzbaren Kennungen fragen, variiert die Antwort der Plattform je nach SDK-Zielversion:
- Wenn Ihre App auf Android 10 oder höher ausgerichtet ist, wird ein
SecurityException
ausgelöst. - Wenn deine 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 keine nicht rücksetzbaren Geräte-IDs erforderlich. Wenn in Ihrer App beispielsweise für das Anzeigen-Tracking oder zur Nutzeranalyse nicht rücksetzbare Geräte-IDs verwendet werden, verwenden Sie für diese speziellen Anwendungsfälle stattdessen eine Android-Werbe-ID. Weitere Informationen finden Sie unter Best Practices für eindeutige Kennzeichnungen.
Eingeschränkter Zugriff auf Daten in der Zwischenablage
Sofern Ihre Anwendung nicht der standardmäßige Eingabemethoden-Editor (IME) oder die App ist, die derzeit im Fokus ist, kann sie unter Android 10 oder höher nicht auf Daten in der Zwischenablage zugreifen.
Schutz der Seriennummer eines 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 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 sind die Änderungen für Kamerametadaten und Verbindungs-APIs aufgeführt.
Zugriffsbeschränkung auf Kameradetails und ‐metadaten
Unter Android 10 wird der Umfang der Informationen geändert, die die Methode getCameraCharacteristics()
standardmäßig zurückgibt. Deine 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 du Nutzer auffordern möchtest, die WLAN-Funktion zu aktivieren oder zu deaktivieren, verwende das Einstellungssteuerfeld.
Einschränkungen für den direkten Zugriff auf konfigurierte WLANs
Aus Datenschutzgründen 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äteinhaber oder der Profilinhaber sein.
Wenn Ihre App auf Android 10 oder höher ausgerichtet ist, aber keine System-App oder kein DPC ist, geben die folgenden Methoden keine nützlichen Daten zurück:
Die Methode
getConfiguredNetworks()
gibt immer eine leere Liste zurück.Jede Netzwerkvorgangsmethode, die eine Ganzzahl –
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:
- Wenn Sie eine sofortige lokale Verbindung zu einem WLAN herstellen möchten, verwenden Sie
WifiNetworkSpecifier
in einemNetworkRequest
-Standardobjekt. - Wenn Sie WLANs für die Bereitstellung des Internets für Nutzer hinzufügen möchten, verwenden Sie
WifiNetworkSuggestion
-Objekte. Sie können Netzwerke, die im Dialogfeld zur automatischen Verbindung von Netzwerken angezeigt werden, durch Aufrufen vonaddNetworkSuggestions()
bzw.removeNetworkSuggestions()
hinzufügen und entfernen. Für diese Methoden sind keine Berechtigungen zur Standortermittlung erforderlich.
Einige APIs für Telefonie, Bluetooth oder WLAN erfordern die Berechtigung zur Standortermittlung „FINE“
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, 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 der Nutzer verhindert Android 10 den stummen 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 signature-access.
Apps, die auf den Bildschirminhalt des Geräts zugreifen müssen, sollten die MediaProjection
API verwenden. Hier wird der Nutzer um seine Einwilligung gebeten.
Berechtigungsprüfung für Nutzer 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 auf einem Gerät verwenden, auf dem zum ersten Mal Android 10 oder höher ausgeführt wird (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 gewährt hat.
Erkennung körperlicher Aktivität
Mit Android 10 wird die android.permission.ACTIVITY_RECOGNITION
-Laufzeitberechtigung für Apps eingeführt, die die Schrittzahl des Nutzers erkennen oder seine körperlichen Aktivitäten wie Gehen, Radfahren oder Fahren in einem Fahrzeug klassifizieren müssen. So können Nutzer in den Einstellungen sehen, wie Gerätesensordaten verwendet werden.
Einige Bibliotheken in Google Play-Diensten, wie 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, die diese Berechtigung benötigen, sind die Sensoren für Schrittzähler und Schrittdetektor.
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
, wenn Ihre App 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, nachdem Sie Ihre App auf Android 10 aktualisiert haben. Der Nutzer kann diese Berechtigung jedoch jederzeit in den Systemeinstellungen widerrufen.
Berechtigungsgruppen wurden von der Benutzeroberfläche entfernt
Ab Android 10 können Apps nicht mehr abrufen, wie Berechtigungen in der UI gruppiert sind.