Arbeitsprofile

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