Mit der Android-Plattform können Geräte Arbeit Profile (auch als verwaltete Profile bezeichnet). Ein Arbeitsprofil wird verwaltet. die von einem IT-Administrator verwaltet werden, und die für ihn verfügbaren Funktionen werden getrennt vom Funktionalität des Hauptprofils des Nutzers. Mit diesem Ansatz können Organisationen steuern, die Umgebung, in der unternehmensspezifische Apps und Daten auf dem Gerät eines Nutzers ausgeführt werden, Nutzer können weiterhin ihre privaten Apps und Profile nutzen.
In dieser Lektion erfahren Sie, wie Sie Ihre Anwendung so ändern, dass sie funktioniert. auf Geräten mit Arbeitsprofil. Sie müssen nichts unternehmen. und zwar abgesehen von den üblichen Best Practices für die App-Entwicklung. Einige dieser auf Geräten mit Arbeitsprofilen besonders wichtig. Dieses hebt die Probleme hervor, die Sie kennen müssen.
Übersicht
Nutzer möchten ihre privaten Geräte oft in einer Unternehmensumgebung verwenden. Dieses Situation können Unternehmen in ein Dilemma führen. Wenn Nutzende eine eigene verwenden können Gerät muss das Unternehmen befürchten, dass vertrauliche Informationen (z. B. Mitarbeiter) E-Mails und Kontakte) befinden sich auf einem Gerät, das die Organisation nicht verwaltet.
Aus diesem Grund können Organisationen mit Android 5.0 (API-Level 21) Arbeitsprofile einrichten Wenn auf einem Gerät ein Arbeitsprofil vorhanden ist, Einstellungen werden vom IT-Administrator gesteuert. Die Der IT-Administrator kann festlegen, welche Apps für dieses Profil zugelassen sind, und nur steuern, welche Gerätefunktionen dem Profil zur Verfügung stehen.
Wenn ein Gerät ein Arbeitsprofil hat, gibt es Auswirkungen auf Apps auf dem Gerät ausgeführt wird, unabhängig davon, unter welchem Profil die App ausgeführt wird:
- Standardmäßig wechseln die meisten Intents nicht von einem Profil zum anderen. Wenn ein im Profil ausgeführte App löst einen Intent aus. Für den Intent auf und der Intent darf nicht zum anderen Profil wechseln Aufgrund von Profileinschränkungen schlägt die Anfrage fehl und die App wird möglicherweise heruntergefahren. unerwartet.
- Der IT-Administrator des Profils kann einschränken, welche System-Apps auf dem Arbeitsprofil. Diese Einschränkung kann auch dazu führen, dass kein Handler für einige häufige Intents im Arbeitsprofil.
- Da das private und das Arbeitsprofil separate Speicherbereiche haben, Datei-URI, der in einem Profil gültig ist, ist auch im anderen nicht gültig. Beliebig Intent, der in einem Profil ausgelöst wird, kann auch im anderen verarbeitet werden (je nach Profil Einstellungen). Daher ist es nicht sicher, Datei-URIs an Intents anzuhängen.
Fehlgeschlagene Intents verhindern
Auf einem Gerät mit einem Arbeitsprofil gibt es Einschränkungen in Bezug darauf, ob Intents von einem Profil zum anderen wechseln können. Meistens wird beim Auslösen eines Intents deaktiviert ist, wird sie in dem Profil behandelt, in dem sie ausgelöst wird. Wenn kein Handler vorhanden ist für den Intent für dieses Profil wird der Intent nicht verarbeitet und die Anwendung ausgelöst wurde, wird sie möglicherweise unerwartet heruntergefahren, selbst wenn es einen Handler für die Intent auf dem anderen Profil.
Der Profiladministrator kann auswählen, welche Intents von einem Profil zum anderen wechseln dürfen. Da der IT-Administrator diese Entscheidung getroffen haben, besteht für Sie keine Möglichkeit, um im Voraus zu erfahren, welche Intents diese Grenze überschreiten dürfen. Die Der IT-Administrator legt diese Richtlinie fest und kann sie jederzeit ändern.
Bevor Ihre App eine Aktivität startet, sollten Sie prüfen, ob eine
angemessene Auflösung zu erhalten. Ich
können Sie unter Intent.resolveActivity()
überprüfen, ob es eine akzeptable Lösung gibt. Wenn keine
den Intent aufzulösen, gibt die Methode
null
Wenn die Methode nicht null zurückgibt, gibt es mindestens eine Möglichkeit,
den Intent aufzulösen. In diesem Fall
Intent auflösbar sein,
weil es einen Handler für das aktuelle Profil gibt oder der Intent
darf zu einem Handler im anderen Profil wechseln. (Weitere Informationen
Intents auflösen, siehe Allgemeine Intents.
Wenn Ihre App beispielsweise Timer stellen muss, muss sie überprüfen,
gibt es einen gültigen Handler für den Intent ACTION_SET_TIMER
. Wenn die App das Problem nicht beheben kann
eine entsprechende Aktion ausführen (z. B. eine Fehlermeldung
.
Kotlin
fun startTimer(message: String, seconds: Int) { // Build the "set timer" intent val timerIntent = Intent(AlarmClock.ACTION_SET_TIMER).apply { putExtra(AlarmClock.EXTRA_MESSAGE, message) putExtra(AlarmClock.EXTRA_LENGTH, seconds) putExtra(AlarmClock.EXTRA_SKIP_UI, true) } // Check if there's a handler for the intent if (timerIntent.resolveActivity(packageManager) == null) { // Can't resolve the intent! Fail this operation cleanly // (perhaps by showing an error message) } else { // Intent resolves, it's safe to fire it off startActivity(timerIntent) } }
Java
public void startTimer(String message, int seconds) { // Build the "set timer" intent Intent timerIntent = new Intent(AlarmClock.ACTION_SET_TIMER) .putExtra(AlarmClock.EXTRA_MESSAGE, message) .putExtra(AlarmClock.EXTRA_LENGTH, seconds) .putExtra(AlarmClock.EXTRA_SKIP_UI, true); // Check if there's a handler for the intent if (timerIntent.resolveActivity(getPackageManager()) == null) { // Can't resolve the intent! Fail this operation cleanly // (perhaps by showing an error message) } else { // Intent resolves, it's safe to fire it off startActivity(timerIntent); } }
Dateien für mehrere Profile freigeben
Manchmal muss eine App anderen Apps Zugriff auf ihre eigenen Dateien gewähren. Eine Bildergalerie-App möchte z. B. Bilder mit Bildern teilen, Redakteure. Normalerweise gibt es zwei Möglichkeiten, eine Datei freizugeben: mit einer Datei URI oder Inhalts-URI angeben.
Ein Datei-URI beginnt mit dem Präfix file:
, gefolgt vom
absoluten Pfad der Datei im Speicher des Geräts. Da die
das Arbeitsprofil und das private Profil separate Speicherbereiche, einen Datei-URI,
das in einem Profil gültig ist, ist auch im anderen nicht gültig. Diese Situation
bedeutet, dass Sie, wenn Sie
einen Datei-URI an einen Intent anhängen
und der Intent im anderen Profil verarbeitet wird.
Der Handler kann nicht auf die Datei zugreifen.
Stattdessen sollten Sie Dateien mit Inhalts-URIs freigeben. Inhalts-URIs
um die Datei sicherer und gemeinsam nutzbar zu machen. Der Inhalts-URI enthält
den Dateipfad, sondern auch die Zertifizierungsstelle, die die Datei bereitstellt, und eine ID-Nummer
zur Identifizierung der Datei. Du kannst eine Content-ID für jede Datei generieren, indem du eine
FileProvider
Diese Inhalte können Sie dann
ID mit anderen Apps teilen (sogar im anderen Profil). Der Empfänger kann das
um Zugriff auf die Datei zu erhalten.
So rufen Sie beispielsweise den Inhalts-URI für eine bestimmte Datei ab: URI:
Kotlin
// Open File object from its file URI val fileToShare = File(fileUriToShare) val contentUriToShare: Uri = FileProvider.getUriForFile( context, "com.example.myapp.fileprovider", fileToShare )
Java
// Open File object from its file URI File fileToShare = new File(fileUriToShare); Uri contentUriToShare = FileProvider.getUriForFile(getContext(), "com.example.myapp.fileprovider", fileToShare);
Wenn Sie die Methode getUriForFile()
aufrufen,
müssen Sie auch die Befugnis des Dateianbieters angeben (in diesem Beispiel
"com.example.myapp.fileprovider"
), die in den
<provider>
-Element Ihres App-Manifests.
Weitere Informationen zur Freigabe von Dateien mit Inhalts-URIs finden Sie unter
Teilen
Files (Dateien).
Auf Benachrichtigungen warten
Eine App bietet in der Regel ein
Abgeleitete NotificationListenerService
-Klasse zu
Systemrückrufe über Änderungen an Benachrichtigungen erhalten Geräte mit
Arbeitsprofile können sich auf die Funktionsweise von NotificationListenerService
auswirken
mit Ihrer App.
In einem Arbeitsprofil
Du kannst kein NotificationListenerService
aus einer App verwenden
im Arbeitsprofil ausgeführt wird. Wenn Ihre App in einem Arbeitsprofil ausgeführt wird,
ignoriert das System die NotificationListenerService
deiner App. Sie können jedoch
Apps, die im privaten Profil ausgeführt werden, können auf Benachrichtigungen warten.
In einem privaten Profil
Wenn deine App im privaten Profil ausgeführt wird, erhältst du möglicherweise keine Benachrichtigungen
für Apps, die im Arbeitsprofil ausgeführt werden. Standardmäßig werden alle Apps des privaten Profils
Rückrufe erhalten, aber ein IT-Administrator kann ein oder mehrere private Profile auf die Zulassungsliste setzen
Apps, die auf Änderungen von Benachrichtigungen warten. Das System blockiert dann
Apps, die nicht auf der Zulassungsliste stehen. Ab Android 8.0 (API-Level 26) wird eine Geräterichtlinie
kann der Controller (DPC), der ein Arbeitsprofil verwaltet, verhindern, dass die App empfangsbereit ist
über die DevicePolicyManager
auf die Benachrichtigungen des Arbeitsprofils zugreifen
Methode
setPermittedCrossProfileNotificationListeners()
.
Ihre App erhält weiterhin Rückrufe zu Benachrichtigungen, die in der privaten
zu erstellen.
Testen Sie Ihre App auf Kompatibilität mit Arbeitsprofilen.
Sie sollten Ihre App in einer Arbeitsprofil-Umgebung testen, Probleme erkennen, die dazu führen können, dass deine App auf einem Gerät mit Arbeitsprofile. Vor allem das Testen auf einem Gerät mit Arbeitsprofil um sicherzustellen, dass Ihre App Intents ordnungsgemäß verarbeitet: Es werden keine Intents ausgelöst, die keine URIs anhängen, die nicht profilübergreifend funktionieren. aktiviert.
Wir haben eine Beispiel-App, TestDPC, bereitgestellt. mit dem Sie ein Arbeitsprofil auf einem Android-Gerät einrichten können, Android 5.0 (API-Level 21) und höher Diese App bietet eine einfache Möglichkeit, in einer Arbeitsprofil-Umgebung ausführen. Du kannst diese App auch für Folgendes verwenden: konfigurieren Sie das Arbeitsprofil wie folgt:
- Geben Sie an, welche Standard-Apps im verwalteten Konto verfügbar sind Profil
- Konfigurieren Sie, welche Intents von einem Profil zu einem weitergeleitet werden dürfen der andere
Wenn Sie eine App manuell über ein USB-Kabel auf einem Gerät installieren, das über Arbeitsprofil ist, ist die App sowohl im privaten als auch im beruflichen Profil installiert. zu erstellen. Nachdem Sie die App installiert haben, können Sie sie im folgenden Bedingungen:
- Wenn ein Intent normalerweise von einer Standard-App verarbeitet wird (z. B. die Kamera-App), deaktivieren Sie diese Standard-App im Arbeitsprofil und prüfen, ob die App dies korrekt verarbeitet.
- Wenn Sie einen Intent auslösen und erwarten, dass er von einer anderen App verarbeitet wird, versuchen Sie Folgendes:
die Berechtigung des Intents zum Wechseln von einem Profil zu einem
eine andere. Prüfen Sie, ob sich die App in beiden Fällen einwandfrei verhält. Wenn die
Intent darf nicht zwischen Profilen wechseln. Prüfen Sie das Verhalten der Anwendung sowohl
Wenn es einen geeigneten Handler im Profil der Anwendung gibt und wenn nicht.
Wenn Ihre App beispielsweise einen kartenbezogenen Intent auslöst, versuchen Sie Folgendes:
Szenarien:
<ph type="x-smartling-placeholder">
- </ph>
- Auf dem Gerät können Map-Intents von einem Profil zum anderen gewechselt werden. Es gibt einen geeigneten Handler im anderen Profil (das Profil, das nicht für die Anwendung gilt) ausgeführt werden)
- Das Gerät lässt nicht zu, dass Zuordnungs-Intents zwischen Profilen wechseln, aber es gibt keine ein geeigneter Handler für das App-Profil ist
- Das Gerät lässt nicht zu, dass Zuordnungs-Intents zwischen Profilen wechseln. ist kein geeigneter Handler für Map Intents auf dem Geräteprofil
- Prüfen Sie, ob sich der Intent ordnungsgemäß verhält, wenn Sie einem Intent Inhalte anhängen. sowohl wenn sie im Profil der Anwendung verarbeitet wird, als auch Profilen.
Tipps und Tricks zum Testen von Arbeitsprofilen
Es gibt einige Tricks, die Ihnen beim Testen einer Arbeitsprofil-Gerät verbunden sind.
- Wenn Sie eine App per Sideload auf einem Gerät mit Arbeitsprofil laden, in beiden Profilen installiert ist. Wenn Sie möchten, können Sie die App aus einem Profil löschen und auf dem anderen belassen.
- Die meisten der Activity Manager-Befehle in der Android Debug Bridge-Shell (ADB)
unterstützen das Flag
--user
, mit dem Sie angeben können, welcher Nutzer ausgeführt werden soll. als. Wenn Sie einen Nutzer angeben, können Sie festlegen, ob die Ausführung als nicht verwalteter primärer Nutzer erfolgen soll oder Arbeitsprofil. Weitere Informationen finden Sie unter ADB. Shell-Befehle - Um die aktiven Nutzer auf einem Gerät zu finden, verwende die
list users
-Befehl. Die erste Zahl im Ausgabestring ist die Nutzer-ID, die Sie mit dem Flag--user
verwenden können. Weitere Informationen finden Sie unter ADB Shell Befehle:
Um beispielsweise die Nutzer auf einem Gerät zu finden, führen Sie folgenden Befehl aus:
$ adb shell pm list users UserInfo{0:Drew:13} running UserInfo{10:Work profile:30} running
In diesem Fall hat der primäre Nutzer ("Drew") die Nutzer-ID 0 und der hat das Arbeitsprofil die Nutzer-ID 10. Um eine App im Arbeitsprofil auszuführen, müssen Sie würde einen Befehl wie diesen verwenden:
$ adb shell am start --user 10 \ -n "com.example.myapp/com.example.myapp.testactivity" \ -a android.intent.action.MAIN -c android.intent.category.LAUNCHER