Die Übersetzung des Artikels wurde speziell für Studenten des Kurses "Android-Entwickler" vorbereitet . Grundkurs . " Wir erinnern Sie auch daran, dass wir uns weiterhin für den Fortgeschrittenenkurs "Spezialisierung Android-Entwickler" anmelden.
Wir befinden uns im 10. Jahr der Android-Entwicklung (Android Q muss Version 10.0 sein). Laut Beta 4 verfügt Android Q offiziell über eine
Level 29-API . Obwohl
Beta 5 bereits vorhanden ist und Beta 6 erwartet wird, wurde die API als endgültig markiert. Jetzt ist es an der Zeit zu sehen, wie sich Android Q auf Anwendungen auswirkt und welche Änderungen vorgenommen werden müssen, um Android Q vollständig zu unterstützen.
Wichtige Änderungen (nicht alle), die in Android Q dargestellt werden, können in zwei Kategorien unterteilt werden: a)
Vertraulichkeit und Sicherheit , b)
Benutzererfahrung .
Vom Übersetzer: „Wir haben die Übersetzung in zwei Teile unterteilt, die diesen Kategorien entsprechen. Dementsprechend werden wir im ersten Teil über Datenschutz und Sicherheit sprechen. "1) Vertraulichkeit und Sicherheit
a) Hintergrundaktivitäten starten
Sie können eine Aktivität nicht mehr starten, wenn sich Ihre Anwendung im Hintergrund befindet.
- Auswirkungen: Alle Anwendungen, die auf Q ausgeführt werden (unabhängig vom Ziel-SDK). Eine Ausnahme wird ausgelöst, wenn Android Q die Zielversion der Anwendung ist. und Aktivität wird nur dann nicht gestartet, wenn Android Q nicht das Ziel-SDK für die Anwendung ist, sondern auf einem Gerät mit Android Q funktioniert.
- Ausnahmen: Gebundene Dienste wie Barrierefreiheit, automatische Vervollständigung usw. Wenn die Anwendung einen
PendingIntent
vom System empfängt, können wir ihn zum Starten der Aktivität verwenden. Wenn die Anwendung über die SYSTEM_ALERT_WINDOW
(in Android GO entfernt) oder die kürzlich als finish()
Aktivität für Aktivität verfügt (es wird nicht empfohlen, sich darauf zu verlassen. "Kürzlich" kann sehr vieldeutig sein), ist Ihre Anwendung von dieser Einschränkung befreit. - Empfohlener Ansatz: Benachrichtigung löst Aktivität aus
val fullScreenIntent = Intent(this, CallActivity::class.java) val fullScreenPendingIntent = PendingIntent.getActivity(this, 0, fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT) val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID) .... .setPriority(NotificationCompat.PRIORITY_HIGH) .setCategory(NotificationCompat.CATEGORY_CALL) .setFullScreenIntent(fullScreenPendingIntent, true)
Fügen
Fullscreen PendingIntent
der Benachrichtigung
Fullscreen PendingIntent
. Nachdem die Benachrichtigung funktioniert hat, startet das System eine Vollbild-Absicht.
Wenn Sie die Aktivität daher im Hintergrund starten möchten, erstellen Sie zunächst eine Benachrichtigung, die dem Benutzer angezeigt wird.
Fullscreen PendingIntent
in dieser Benachrichtigung
Fullscreen PendingIntent
.
USE_FULL_SCREEN_INTENT
Ihrem Manifest
USE_FULL_SCREEN_INTENT
Berechtigung
USE_FULL_SCREEN_INTENT
. Nachdem die Benachrichtigung funktioniert hat, startet das System eine Vollbild-Absicht.
- Fallstricke: Das System entscheidet, wann eine Benachrichtigung angezeigt und wann eine Aktivität angezeigt wird. Wenn der Benutzer das Gerät aktiv verwendet, wird eine Popup-Benachrichtigung angezeigt. Wenn sich das Gerät in Ruhe befindet oder der Benutzer mit der Benachrichtigung interagiert, wird die Vollbildaktivität gestartet. Zum Beispiel wie beim Empfang eines Telefonanrufs (Popup-Benachrichtigungen während der Verwendung des Telefons, ansonsten Vollbildaktivität).
b) Hardware-IDs
Der Zugriff auf nicht zurücksetzbare Gerätekennungen wurde in Android Q widerrufen.
- Auswirkungen: Alle Anwendungen, die auf Q ausgeführt werden (unabhängig vom Ziel-SDK). Eine Ausnahme wird ausgelöst, wenn Q das Ziel-SDK ist. und gibt
null
wenn das Ziel-SDK kleiner als Q ist - Vermeiden Sie: Die Mac-Adresse ist jetzt zufällig ausgewählt und die IMEI (
TelephonyManager.getDeviceId()
) und die Seriennummer sind nicht mehr verfügbar. Jetzt sind sie "privilegierte Berechtigungen" und nur für Bedieneranwendungen verfügbar. - Empfohlener Ansatz: Verwenden Sie zurücksetzbare Kennungen wie Werbe-ID, Instanz-ID oder GUID (Global Unique ID). Weitere Informationen dazu, welche Kennung in welchem Fall verwendet werden soll, finden Sie unter Best Practices für eindeutige Bezeichner .
c) Hintergrunddefinition des Standorts
Ab Android Q unterscheidet das System zwischen Standortanforderungen im Vordergrund und im Hintergrund.
Die Anforderung der Erlaubnis zum Zugriff auf den Speicherort hat jetzt drei Optionen: Immer zulassen, Nur bei Verwendung der Anwendung zulassen (Zugriff nur im Vordergrund) und Verweigern (kein Zugriff).
- Was es betrifft: Es hängt vom Ziel-SDK ab. Wenn Q das Ziel-SDK für die Anwendung ist, müssen Sie im Hintergrund eine neue Standortberechtigung anfordern. Wenn die Anwendung über ein anderes Ziel-SDK verfügt, erhält sie diese Berechtigung automatisch, wenn sie bereits Zugriffsrechte auf den Speicherort hatte.
Bild aus der Android Developer Documentation- Empfohlener Ansatz: Wenn die Anwendung einen einmaligen Zugriff auf den Speicherort des Benutzers benötigt, um einige Aufgaben auszuführen, verwenden Sie den Vordergrunddienst mit dem Parameter foregroundServiceType, der in der Anwendungsmanifestdatei als
location
angegeben ist.
<service android:name="MyNavigationService" android:foregroundServiceType="location" ... />
Wenn die Anwendung ständigen Zugriff auf den Standort des Geräts benötigt, z. B. für Geofence, kann sie eine Anforderung konfigurieren, um den Zugriff auf den Standort im Hintergrund zu ermöglichen. Andere Aspekte der Anwendung (z. B. wie der Speicherort extrahiert und verwendet wird) müssen nicht geändert werden.
ACCESS_BACKGROUND_LOCATION
dem Manifest die
ACCESS_BACKGROUND_LOCATION
hinzu, um den Zugriff auf einen Speicherort im Hintergrund
ACCESS_BACKGROUND_LOCATION
:
<manifest> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> </manifest>
Fordern Sie im Hintergrund den Standortzugriff an
Vom System angezeigte Erinnerung an den Zugriff auf einen Ort im HintergrundEinige wichtige Dinge, die Sie beachten sollten: Der Benutzer kann daran erinnert werden, nachdem er der Anwendung Zugriff auf den Speicherort des Geräts im Hintergrund gewährt hat, und wie jede andere Berechtigung kann der Benutzer die Berechtigung dafür widerrufen. Dies ist besonders wichtig für Anwendungen, in denen Q kein Ziel-SDK ist, sondern auf Geräten mit Android Q ausgeführt wird, da es die Standardhintergrundauflösung erhalten würde, wenn es über eine Standortberechtigung verfügt. Stellen Sie sicher, dass Ihre Anwendung solche Skripte ordnungsgemäß verarbeitet. Überprüfen Sie aus diesem Grund, wann immer eine Anwendung einen Dienst startet oder einen Standort anfordert, ob der Benutzer der Anwendung weiterhin den Zugriff auf Standortinformationen gestattet.
In diesem Zusammenhang ging der erste Teil des Artikels zu Ende. Und wie versprochen werden wir im
zweiten Teil über Benutzererfahrungen sprechen.