Mehrere Nutzer verwalten

In diesem Entwicklerhandbuch wird erläutert, wie Sie mit Ihrem Device Policy Controller (DPC) mehrere Android-Nutzer auf dedizierten Geräten verwalten

Übersicht

Mit Ihrem DPC können mehrere Personen ein einzelnes zweckbestimmtes Gerät gemeinsam nutzen. Ihr DPC auf einem vollständig verwalteten Gerät ausführen, können zwei Arten von Nutzern erstellt und verwaltet werden:

  • Sekundärnutzer sind Android-Nutzer mit unterschiedlichen gespeicherten Apps und Daten. zwischen den Sitzungen. Sie verwalten den Nutzer mit einer Administratorkomponente. Diese Nutzer sind nützlich für Fälle, in denen ein Gerät zu Beginn einer Schicht aufgenommen wird, z. B. mitarbeitenden im Lieferfahrdienst oder Sicherheitspersonal.
  • Sitzungsspezifische Nutzer sind sekundäre Nutzer, die vom System gelöscht werden, wenn der Nutzer stoppt, schaltet sich aus oder das Gerät startet neu. Diese Nutzenden sind nützlich für Fälle, in denen Daten nach Abschluss der Sitzung gelöscht werden können, z. B. der öffentliche Zugriff Internet-Kioske.

Sie verwenden Ihren vorhandenen DPC, um das zweckbestimmte Gerät und das sekundäre zu verwalten. Nutzenden. Eine Administratorkomponente in Ihrem DPC legt sich als Administrator für einen neuen sekundären Dienst fest. wenn Sie sie erstellen.

<ph type="x-smartling-placeholder">
</ph> Primärer Nutzer und zwei sekundäre Nutzer
Abbildung 1: Primäre und sekundäre Nutzer, die von Administratoren verwaltet werden von denselben DPC

Administratoren eines sekundären Nutzers müssen demselben Paket angehören wie der Administrator des ein vollständig verwaltetes Gerät. Wir empfehlen, einen Administrator freizugeben, um die Entwicklung zu vereinfachen zwischen dem Gerät und den sekundären Nutzern.

Die Verwaltung mehrerer Nutzer auf dedizierten Geräten erfordert normalerweise Android 9.0, Einige der Methoden, die in diesem Entwickler-Leitfaden verwendet werden, finden Sie jedoch früheren Android-Versionen.

Sekundäre Nutzer

Sekundäre Nutzer können eine WLAN-Verbindung herstellen und neue Netzwerke konfigurieren. Sie können keine Netzwerke bearbeiten oder löschen, auch nicht die von ihnen erstellten Netzwerke.

Nutzer erstellen

Ihr DPC kann im Hintergrund zusätzliche Nutzer erstellen und dann zwischen ihnen wechseln in den Vordergrund. Der Prozess ist für sekundäre und flüchtigen Nutzern. Implementieren Sie die folgenden Schritte in den Administratoren des Verwaltetes Gerät und sekundärer Nutzer:

  1. Rufen Sie DevicePolicyManager.createAndManageUser() auf. Um einen flüchtigen Nutzer zu erstellen, fügen Sie MAKE_USER_EPHEMERAL im Flags-Argument.
  2. Anruf DevicePolicyManager.startUserInBackground() bis den Nutzer im Hintergrund zu starten. Der Nutzer wird ausgeführt, aber Sie möchten um die Einrichtung abzuschließen, bevor der Nutzer in den Vordergrund gebracht wird die Person, die das Gerät verwendet.
  3. Rufen Sie im Administrator des sekundären Nutzers DevicePolicyManager.setAffiliationIds() bis den neuen Nutzer mit dem primären Nutzer zu verknüpfen. Weitere Informationen finden Sie unter DPC-Koordination weiter unten.
  4. Rufen Sie im Administratorbereich des vollständig verwalteten Geräts DevicePolicyManager.switchUser(), um den Nutzer zu wechseln im Vordergrund.

Das folgende Beispiel zeigt, wie Sie Schritt 1 zu Ihrem DPC hinzufügen können:

Kotlin

val dpm = getContext().getSystemService(Context.DEVICE_POLICY_SERVICE)
        as DevicePolicyManager

// If possible, reuse an existing affiliation ID across the
// primary user and (later) the ephemeral user.
val identifiers = dpm.getAffiliationIds(adminName)
if (identifiers.isEmpty()) {
    identifiers.add(UUID.randomUUID().toString())
    dpm.setAffiliationIds(adminName, identifiers)
}

// Pass an affiliation ID to the ephemeral user in the admin extras.
val adminExtras = PersistableBundle()
adminExtras.putString(AFFILIATION_ID_KEY, identifiers.first())
// Include any other config for the new user here ...

// Create the ephemeral user, using this component as the admin.
try {
    val ephemeralUser = dpm.createAndManageUser(
            adminName,
            "tmp_user",
            adminName,
            adminExtras,
            DevicePolicyManager.MAKE_USER_EPHEMERAL or
                    DevicePolicyManager.SKIP_SETUP_WIZARD)

} catch (e: UserManager.UserOperationException) {
    if (e.userOperationResult ==
            UserManager.USER_OPERATION_ERROR_MAX_USERS) {
        // Find a way to free up users...
    }
}

Java

DevicePolicyManager dpm = (DevicePolicyManager)
    getContext().getSystemService(Context.DEVICE_POLICY_SERVICE);

// If possible, reuse an existing affiliation ID across the
// primary user and (later) the ephemeral user.
Set<String> identifiers = dpm.getAffiliationIds(adminName);
if (identifiers.isEmpty()) {
  identifiers.add(UUID.randomUUID().toString());
  dpm.setAffiliationIds(adminName, identifiers);
}

// Pass an affiliation ID to the ephemeral user in the admin extras.
PersistableBundle adminExtras = new PersistableBundle();
adminExtras.putString(AFFILIATION_ID_KEY, identifiers.iterator().next());
// Include any other config for the new user here ...

// Create the ephemeral user, using this component as the admin.
try {
  UserHandle ephemeralUser = dpm.createAndManageUser(
      adminName,
      "tmp_user",
      adminName,
      adminExtras,
      DevicePolicyManager.MAKE_USER_EPHEMERAL |
          DevicePolicyManager.SKIP_SETUP_WIZARD);

} catch (UserManager.UserOperationException e) {
  if (e.getUserOperationResult() ==
      UserManager.USER_OPERATION_ERROR_MAX_USERS) {
    // Find a way to free up users...
  }
}

Wenn Sie einen neuen Nutzer erstellen oder starten, können Sie die Ursache auf Fehler prüfen. indem Sie die Ausnahme UserOperationException abfangen und den Aufruf getUserOperationResult() Überschreitung der Nutzeranzahl Limits sind häufige Gründe für Fehler:

Das Erstellen eines Nutzers kann einige Zeit dauern. Wenn Sie häufig Nutzer erstellen, können Sie die User Experience verbessern, indem ein einsatzbereiter Nutzer im Hintergrund vorbereitet wird. Unter Umständen müssen Sie die Vorteile eines einsatzbereiten Nutzers mit dem maximalen Anzahl der auf einem Gerät zulässigen Nutzer

Identifizierung

Nachdem Sie einen neuen Nutzer erstellt haben, sollten Sie mit einer dauerhaften Seriennummer auf ihn verweisen. Nummer. Speichern Sie die UserHandle nicht dauerhaft, da sie vom System bei Bedarf wiederverwendet werden. Nutzer zu erstellen und zu löschen. Erfahre die Seriennummer telefonisch unter UserManager.getSerialNumberForUser():

Kotlin

// After calling createAndManageUser() use a device-unique serial number
// (that isn’t recycled) to identify the new user.
secondaryUser?.let {
    val userManager = getContext().getSystemService(UserManager::class.java)
    val ephemeralUserId = userManager!!.getSerialNumberForUser(it)
    // Save the serial number to storage  ...
}

Java

// After calling createAndManageUser() use a device-unique serial number
// (that isn’t recycled) to identify the new user.
if (secondaryUser != null) {
  UserManager userManager = getContext().getSystemService(UserManager.class);
  long ephemeralUserId = userManager.getSerialNumberForUser(secondaryUser);
  // Save the serial number to storage  ...
}

Nutzerkonfiguration

Je nach den Anforderungen Ihrer Nutzer können Sie die Einrichtung sekundärer Nutzenden. Beim Aufrufen von createAndManageUser() können Sie die folgenden Flags angeben:

SKIP_SETUP_WIZARD
Überspringt die Ausführung des Einrichtungsassistenten für neue Nutzer, der nach Updates sucht und diese installiert, fordert den Nutzer auf, zusammen mit den Google-Diensten ein Google-Konto hinzuzufügen, und legt fest, eine Displaysperre. Das kann einige Zeit dauern und gilt möglicherweise nicht für alle z. B. an öffentlichen Internetterminals.
LEAVE_ALL_SYSTEM_APPS_ENABLED
Alle System-Apps bleiben im neuen Nutzer aktiviert. Wenn Sie dieses Flag nicht festlegen, enthält der neue Nutzer nur die minimale Anzahl von Apps, die das Smartphone benötigt, - in der Regel ein Dateibrowser, Telefonwahl, Kontakte und SMS-Nachrichten.

Den Nutzerlebenszyklus verfolgen

Wenn es sich bei Ihrem DPC um einen Administrator des vollständig verwalteten Geräts handelt, kann es hilfreich sein, wissen, wann sekundäre Nutzer wechseln. Wenn Sie Folgeaufgaben nach Änderungen ausführen möchten, überschreiben Sie diese Callback-Methoden in der DeviceAdminReceiver-Unterklasse Ihres DPC:

onUserStarted()
Wird aufgerufen, nachdem das System einen Nutzer gestartet hat. Dieser Nutzer ist möglicherweise noch im Hintergrund laufen. Du kannst den Nutzer aus der startedUser abrufen. Argumentieren.
onUserSwitched()
Wird aufgerufen, nachdem das System zu einem anderen Nutzer gewechselt hat. Sie können den neuen Nutzer das jetzt über das Argument switchedUser im Vordergrund ausgeführt wird.
onUserStopped()
Wird aufgerufen, nachdem das System einen Nutzer gestoppt hat, weil er sich abgemeldet oder zu einem neuer Nutzer (wenn der Nutzer sitzungsspezifisch ist) oder der DPC den Nutzer angehalten hat. Sie erhalten den Nutzer aus dem Argument stoppedUser.
onUserAdded()
Wird aufgerufen, wenn das System einen neuen Nutzer hinzufügt. Sekundäre Nutzer werden normalerweise nicht wenn der Callback bei Ihrem DPC eingerichtet ist. Sie finden den Nutzer in der newUser-Argument
onUserRemoved()
Wird aufgerufen, nachdem ein Nutzer vom System gelöscht wurde. Da der Nutzer bereits gelöscht ist, Sie können nicht auf den Nutzer zugreifen, der durch das Argument removedUser dargestellt wird.

Um zu erfahren, wann das System einen Nutzer in den Vordergrund bringt oder ihn zum können Apps einen Empfänger für die ACTION_USER_FOREGROUND und ACTION_USER_BACKGROUND Broadcasts.

Nutzer finden

Um alle sekundären Nutzer zu erhalten, kann ein Administrator eines vollständig verwalteten Geräts den folgenden Link aufrufen: DevicePolicyManager.getSecondaryUsers() Die Ergebnisse Alle sekundären oder sitzungsspezifischen Nutzer einschließen, die der Administrator erstellt hat. Auch die Ergebnisse Alle sekundären Nutzer (oder Gastnutzer), die eine Person, die das Gerät verwendet, die Sie erstellt haben. Die Ergebnisse enthalten keine Arbeitsprofile, da dies nicht sekundäre Nutzer. Das folgende Beispiel zeigt, wie Sie diese Methode verwenden können:

Kotlin

// The device is stored for the night. Stop all running secondary users.
dpm.getSecondaryUsers(adminName).forEach {
    dpm.stopUser(adminName, it)
}

Java

// The device is stored for the night. Stop all running secondary users.
for (UserHandle user : dpm.getSecondaryUsers(adminName)) {
  dpm.stopUser(adminName, user);
}

Hier sind weitere Methoden, die Sie aufrufen können, um den Status von sekundären Nutzern zu ermitteln:

DevicePolicyManager.isEphemeralUser()
Rufen Sie diese Methode vom Administrator eines sekundären Nutzers auf, um zu erfahren, ob es sich um einen flüchtigen Nutzern.
DevicePolicyManager.isAffiliatedUser()
Rufen Sie diese Methode vom Administrator eines sekundären Nutzers auf, um herauszufinden, ob dieser Nutzer die mit dem Hauptnutzer verknüpft sind. Weitere Informationen zur Zugehörigkeit finden Sie unter DPC“. unten beschrieben.

Nutzerverwaltung

Wenn Sie den Nutzerlebenszyklus vollständig verwalten möchten, können Sie APIs für Detaillierte Kontrolle darüber, wann und wie das Gerät die Nutzer ändert Zum Beispiel haben Sie Sie können Nutzer löschen, wenn ein Gerät längere Zeit nicht verwendet wurde. nicht gesendete Bestellungen an einen Server senden, bevor die Schicht eines Mitarbeiters beendet ist.

Abmelden

Unter Android 9.0 wurde dem Sperrbildschirm eine Schaltfläche zum Abmelden hinzugefügt, damit Nutzer Gerät die Sitzung beenden kann. Nach dem Tippen auf die Taste stoppt das System die sekundärer Nutzer gelöscht wird, falls er sitzungsspezifisch ist, und der Primärnutzer kehrt in den Vordergrund. Android blendet die Schaltfläche aus, wenn sich der Hauptnutzer im da sich der Hauptnutzer nicht abmelden kann.

In Android wird die Schaltfläche zum Beenden der Sitzung nicht standardmäßig angezeigt, aber Ihr Administrator (einer vollständig verwaltetes Gerät) können Sie ihn durch folgenden Aufruf aktivieren: DevicePolicyManager.setLogoutEnabled() Bei Bedarf aktuellen Status der Schaltfläche bestätigen, Anruf DevicePolicyManager.isLogoutEnabled()

Der Administrator eines sekundären Nutzers kann den Nutzer programmatisch abmelden und zurückkehren. für den Hauptnutzer. Prüfen Sie zuerst, ob der sekundäre und der primäre Nutzer verknüpft ist, und rufen Sie dann DevicePolicyManager.logoutUser() an. Wenn wenn der abgemeldete Nutzer ein flüchtiger Nutzer ist, beendet das System den Vorgang und löscht dann den Nutzer.

Nutzer wechseln

Um zu einem anderen sekundären Nutzer zu wechseln, kann der Administrator eines vollständig verwalteten Geräts Rufen Sie DevicePolicyManager.switchUser() auf. Zur Vereinfachung können Sie kann null übergeben, um zum primären Nutzer zu wechseln.

Nutzer anhalten

Zum Beenden eines sekundären Nutzers kann ein DPC, dem ein vollständig verwaltetes Gerät gehört, einen Aufruf von DevicePolicyManager.stopUser() Wenn der angehaltene Nutzer ein flüchtigen Nutzer verwenden, wird er beendet und dann gelöscht.

Wir empfehlen, Nutzer nach Möglichkeit aufzuhalten, um die Maximale Anzahl aktiver Nutzer.

Nutzer löschen

Um einen sekundären Nutzer endgültig zu löschen, kann ein DPC einen der folgenden Dienste aufrufen: DevicePolicyManager-Methoden:

  • Ein Administrator eines vollständig verwalteten Geräts kann removeUser() anrufen.
  • Ein Administrator des sekundären Nutzers kann wipeData() aufrufen.

Sitzungsspezifische Nutzer werden vom System gelöscht, wenn sie abgemeldet, beendet oder gewechselt sind. entfernt werden.

Standard-UI deaktivieren

Wenn Ihr DPC eine Benutzeroberfläche zum Verwalten von Nutzern bereitstellt, können Sie die in Android integrierte für mehrere Benutzeroberflächen. Rufen Sie dazu DevicePolicyManager.setLogoutEnabled() und fügen Sie den DISALLOW_USER_SWITCH-Einschränkung, wie in den folgendes Beispiel:

Kotlin

// Explicitly disallow logging out using Android UI (disabled by default).
dpm.setLogoutEnabled(adminName, false)

// Disallow switching users in Android's UI. This DPC can still
// call switchUser() to manage users.
dpm.addUserRestriction(adminName, UserManager.DISALLOW_USER_SWITCH)

Java

// Explicitly disallow logging out using Android UI (disabled by default).
dpm.setLogoutEnabled(adminName, false);

// Disallow switching users in Android's UI. This DPC can still
// call switchUser() to manage users.
dpm.addUserRestriction(adminName, UserManager.DISALLOW_USER_SWITCH);

Die Person, die das Gerät verwendet, kann über die integrierte Android-Benutzeroberfläche keine sekundären Nutzer hinzufügen da Administratoren vollständig verwalteter Geräte automatisch DISALLOW_ADD_USER-Nutzereinschränkung.

Sitzungsnachrichten

Wenn die Person, die ein Gerät verwendet, zu einem neuen Nutzer wechselt, zeigt Android um den Schalter zu markieren. Android zeigt die folgenden Meldungen an:

  • Nachricht zum Starten der Nutzersitzung, die angezeigt wird, wenn das Gerät zu einem sekundären Gerät wechselt vom primären Nutzer zu erhalten.
  • Mitteilung zur Endnutzersitzung, die angezeigt wird, wenn das Gerät an den Hauptnutzer zurückkehrt von einem sekundären Nutzer.

Beim Wechsel zwischen zwei sekundären Nutzern werden die Nachrichten nicht angezeigt.

Da die Nachrichten möglicherweise nicht für alle Situationen geeignet sind, können Sie den Text dieser Nachrichten. Wenn Ihre Lösung z. B. flüchtigen Modus verwendet, können Sie dies beispielsweise in folgenden Meldungen erkennen: Browser beenden Sitzung & Personenbezogene Daten werden gelöscht...

Das System zeigt die Nachricht nur wenige Sekunden lang an, sodass jede Nachricht sollte ein kurzer, klarer Satz sein. Zum Anpassen der Nachrichten kann Ihr Administrator Folgendes anrufen: die DevicePolicyManager-Methoden setStartUserSessionMessage() und setEndUserSessionMessage(), wie in den folgendes Beispiel:

Kotlin

// Short, easy-to-read messages shown at the start and end of a session.
// In your app, store these strings in a localizable resource.
internal val START_USER_SESSION_MESSAGE = "Starting guest session…"
internal val END_USER_SESSION_MESSAGE = "Stopping & clearing data…"

// ...
dpm.setStartUserSessionMessage(adminName, START_USER_SESSION_MESSAGE)
dpm.setEndUserSessionMessage(adminName, END_USER_SESSION_MESSAGE)

Java

// Short, easy-to-read messages shown at the start and end of a session.
// In your app, store these strings in a localizable resource.
private static final String START_USER_SESSION_MESSAGE = "Starting guest session…";
private static final String END_USER_SESSION_MESSAGE = "Stopping & clearing data…";

// ...
dpm.setStartUserSessionMessage(adminName, START_USER_SESSION_MESSAGE);
dpm.setEndUserSessionMessage(adminName, END_USER_SESSION_MESSAGE);

Übergib null, um deine benutzerdefinierten Nachrichten zu löschen und zur Standardeinstellung von Android zurückzukehren Nachrichten. Wenn Sie den aktuellen Nachrichtentext lesen möchten, rufen Sie getStartUserSessionMessage() oder getEndUserSessionMessage()

Der DPC sollte lokalisierte Nachrichten festlegen für die aktuelle Sprache des Nutzers aus. Sie müssen die Nachrichten auch aktualisieren, wenn der Änderungen der Sprache des Nutzers:

Kotlin

override fun onReceive(context: Context?, intent: Intent?) {
    // Added the <action android:name="android.intent.action.LOCALE_CHANGED" />
    // intent filter for our DeviceAdminReceiver subclass in the app manifest file.
    if (intent?.action === ACTION_LOCALE_CHANGED) {

        // Android's resources return a string suitable for the new locale.
        getManager(context).setStartUserSessionMessage(
                getWho(context),
                context?.getString(R.string.start_user_session_message))

        getManager(context).setEndUserSessionMessage(
                getWho(context),
                context?.getString(R.string.end_user_session_message))
    }
    super.onReceive(context, intent)
}

Java

public void onReceive(Context context, Intent intent) {
  // Added the <action android:name="android.intent.action.LOCALE_CHANGED" />
  // intent filter for our DeviceAdminReceiver subclass in the app manifest file.
  if (intent.getAction().equals(ACTION_LOCALE_CHANGED)) {

    // Android's resources return a string suitable for the new locale.
    getManager(context).setStartUserSessionMessage(
        getWho(context),
        context.getString(R.string.start_user_session_message));

    getManager(context).setEndUserSessionMessage(
        getWho(context),
        context.getString(R.string.end_user_session_message));
  }
  super.onReceive(context, intent);
}

DPC-Koordination

Für die Verwaltung von sekundären Nutzern sind in der Regel zwei Instanzen Ihres DPC erforderlich – eine, die das vollständig verwaltete Gerät und der sekundäre Nutzer gehört der anderen Person. Beim Erstellen einen neuen Nutzer hat, legt der Administrator des vollständig verwalteten Geräts sich selbst als Administrator des neuen Nutzers befindet.

Zugehörige Nutzer

Einige der APIs in diesem Entwicklerhandbuch funktionieren nur, wenn die sekundären Nutzer die verbunden sind. Weil Android einige Funktionen deaktiviert (z. B. Netzwerkprotokollierung), wenn Sie neue, nicht verbundene sekundäre Nutzer zu solltet ihr Nutzende so schnell wie möglich verknüpfen. Ein Beispiel: Einrichtung unten.

Einrichten

Richten Sie vor dem Erstellen neuer sekundärer Nutzer über den DPC, zu dem der sekundäre Nutzer gehört, neue sekundäre Nutzer ein. die sie nutzen lassen. Sie können diese Einrichtung über die DeviceAdminReceiver.onEnabled()-Callback Wenn Sie zuvor alle Administrator-Extras im Anruf auf createAndManageUser() festlegen, erhalten Sie aus dem Argument intent. Im folgenden Beispiel sehen Sie, einen neuen sekundären Nutzer im Callback:

Kotlin

override fun onEnabled(context: Context?, intent: Intent?) {
    super.onEnabled(context, intent)

    // Get the affiliation ID (our DPC previously put in the extras) and
    // set the ID for this new secondary user.
    intent?.getStringExtra(AFFILIATION_ID_KEY)?.let {
        val dpm = getManager(context)
        dpm.setAffiliationIds(getWho(context), setOf(it))
    }
    // Continue setup of the new secondary user ...
}

Java

public void onEnabled(Context context, Intent intent) {
  // Get the affiliation ID (our DPC previously put in the extras) and
  // set the ID for this new secondary user.
  String affiliationId = intent.getStringExtra(AFFILIATION_ID_KEY);
  if (affiliationId != null) {
    DevicePolicyManager dpm = getManager(context);
    dpm.setAffiliationIds(getWho(context),
        new HashSet<String>(Arrays.asList(affiliationId)));
  }
  // Continue setup of the new secondary user ...
}

RPCs zwischen DPCs

Obwohl die beiden DPC-Instanzen unter verschiedenen Nutzern ausgeführt werden, die das Gerät besitzen, und die sekundären Nutzer können miteinander kommunizieren. Da beim Aufrufen des Dienstes eines anderen DPC die Nutzergrenzen überschritten werden, kann Ihr DPC keine Rufen Sie bindService() auf, wie Sie es normalerweise in Android Zur Bindung an einen Dienst, der in ein anderer Nutzer, rufen Sie DevicePolicyManager.bindDeviceAdminServiceAsUser()

<ph type="x-smartling-placeholder">
</ph> Primärer Nutzer und zwei verknüpfte sekundäre Nutzer rufen RPCs an.
Abbildung 2: Administratoren von verknüpften primären und sekundären Nutzern Aufrufmethoden für Dienste

Ihr DPC kann sich nur an Dienste binden, die in den Nutzern ausgeführt werden, die von DevicePolicyManager.getBindDeviceAdminTargetUsers() Das folgende Beispiel zeigt den Administrator einer sekundären Nutzerbindung an den Administrator des vollständig verwalteten Geräts:

Kotlin

// From a secondary user, the list contains just the primary user.
dpm.getBindDeviceAdminTargetUsers(adminName).forEach {

    // Set up the callbacks for the service connection.
    val intent = Intent(mContext, FullyManagedDeviceService::class.java)
    val serviceconnection = object : ServiceConnection {
        override fun onServiceConnected(componentName: ComponentName,
                                        iBinder: IBinder) {
            // Call methods on service ...
        }
        override fun onServiceDisconnected(componentName: ComponentName) {
            // Clean up or reconnect if needed ...
        }
    }

    // Bind to the service as the primary user [it].
    val bindSuccessful = dpm.bindDeviceAdminServiceAsUser(adminName,
            intent,
            serviceconnection,
            Context.BIND_AUTO_CREATE,
            it)
}

Java

// From a secondary user, the list contains just the primary user.
List<UserHandle> targetUsers = dpm.getBindDeviceAdminTargetUsers(adminName);
if (targetUsers.isEmpty()) {
  // If the users aren't affiliated, the list doesn't contain any users.
  return;
}

// Set up the callbacks for the service connection.
Intent intent = new Intent(mContext, FullyManagedDeviceService.class);
ServiceConnection serviceconnection = new ServiceConnection() {
  @Override
  public void onServiceConnected(
      ComponentName componentName, IBinder iBinder) {
    // Call methods on service ...
  }

  @Override
  public void onServiceDisconnected(ComponentName componentName) {
    // Clean up or reconnect if needed ...
  }
};

// Bind to the service as the primary user.
UserHandle primaryUser = targetUsers.get(0);
boolean bindSuccessful = dpm.bindDeviceAdminServiceAsUser(
    adminName,
    intent,
    serviceconnection,
    Context.BIND_AUTO_CREATE,
    primaryUser);

Weitere Informationen

Weitere Informationen zu zweckbestimmten Geräten finden Sie in den folgenden Dokumenten: