Birden fazla kullanıcıyı yönetme

Bu geliştirici kılavuzunda, cihaz politikası denetleyicinizin (DPC) Özel cihazlarda birden fazla Android kullanıcısını yönetebilirsiniz.

Genel Bakış

DPC'niz, birden fazla kişinin tek bir özel cihazı paylaşmasına yardımcı olabilir. DPC'niz tümüyle yönetilen bir cihazda çalıştırmak iki tür kullanıcı oluşturup yönetebilir:

  • İkincil kullanıcılar, ayrı uygulamaları ve kayıtlı verileri olan Android kullanıcılarıdır oturumlar arasında geçiş yapın. Kullanıcıyı bir yönetici bileşeni ile yönetirsiniz. Bu kullanıcılar Bu, cihazın mesai başlangıcında teslim alındığı durumlarda kullanışlıdır (örneğin, teslimat görevlileri veya güvenlik çalışanları.
  • Geçici kullanıcılar, kullanıcı aşağıdaki işlemleri gerçekleştirdiğinde sistemin sildiği ikincil kullanıcılardır: kapatması, kapatması veya cihaz yeniden başlatılması anlamına gelir. Bu kullanıcılar, oturum bittikten sonra verilerin silinebileceği (ör. herkese açık erişim) olduğunu varsayalım.
ziyaret edin.

Özel cihazı ve ikincil cihazı yönetmek için mevcut DPC'nizi kullanırsınız. yardımcı olur. DPC'nizdeki bir yönetici bileşeni, kendisini yeni ikincil için yönetici olarak ayarlar kullanıcılar için ek süre oluşturabilirsiniz.

Birincil kullanıcı ve iki ikincil kullanıcı.
Şekil 1. Şu yöneticiler tarafından yönetilen birincil ve ikincil kullanıcılar: aynı DPC'yi kullanma
'nı inceleyin.

İkincil kullanıcının yöneticileri, tümüyle yönetilen bir cihaz. Geliştirme sürecini basitleştirmek için bir yöneticiyi paylaşmanızı öneririz cihaz ile ikincil kullanıcılar arasında geçiş yapar.

Özel cihazlarda birden fazla kullanıcıyı yönetmek için genellikle Android 9.0 gerekir. Ancak bu geliştirici kılavuzunda kullanılan yöntemlerden bazıları Android'in önceki sürümleri.

İkincil kullanıcılar

İkincil kullanıcılar kablosuz ağa bağlanabilir ve yeni ağlar yapılandırabilir. Ancak, oluşturdukları ağlar da dahil olmak üzere, ağları düzenleyemez veya silemez.

Kullanıcı oluşturma

DPC'niz arka planda ek kullanıcılar oluşturup bu kullanıcılar arasında geçiş yapabilir görüntüler. Bu süreç hem ikincil hem de ikincil Geçici kullanıcılar için de uygundur. Aşağıdaki adımları tam olarak yönetilen cihaz ve ikincil kullanıcı:

  1. DevicePolicyManager.createAndManageUser() numaralı telefonu arayın. Geçici kullanıcı oluşturmak için İşaretler bağımsız değişkeninde MAKE_USER_EPHEMERAL.
  2. Telefonla arama DevicePolicyManager.startUserInBackground() - arka planda başlatmanızı sağlar. Kullanıcı çalışmaya başlar ancak kullanıcıya göstermeden önce kurulumu tamamlaması etkili bir yoludur.
  3. İkincil kullanıcının yöneticisinde şu numarayı arayın: DevicePolicyManager.setAffiliationIds() - Yeni kullanıcıyı birincil kullanıcıyla ilişkilendirin. Görüntüleyin DPC koordinasyonu hakkında daha fazla bilgi edinin.
  4. Tümüyle yönetilen cihazın yöneticisine geri dönün, Kullanıcıyı değiştirmek için DevicePolicyManager.switchUser() görebilirsiniz.

Aşağıdaki örnekte, 1. adımı DPC'nize nasıl ekleyebileceğinizi görebilirsiniz:

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...
  }
}

Yeni bir kullanıcı oluşturduğunuzda veya başlatırken hataların nedenini kontrol edebilirsiniz UserOperationException istisnasını yakalayıp getUserOperationResult(). Kullanıcı sınırını aşma Sınırlar, sık karşılaşılan hata nedenleridir:

ziyaret edin.

Kullanıcı oluşturmak biraz zaman alabilir. Sık sık kullanıcı oluşturuyorsanız kullanıma hazır bir kullanıcıyı arka planda hazırlayarak kullanıcı deneyimini iyileştirmeye yardımcı olur. Her zaman hazır olan bir kullanıcının avantajlarını maksimum değer ile bir cihazda izin verilen kullanıcı sayısı.

Tanımlama

Yeni bir kullanıcı oluşturduktan sonra, kalıcı seri numarası olan kullanıcıya başvurmanız gerekir sayı. Sistem, siz işlemi yaparken UserHandle bunları geri dönüştüreceğinden ısrarcı olmayın kullanıcı oluşturabilir ve silebilir. Şu numarayı arayarak seri numarasını öğrenin: 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  ...
}

Kullanıcı yapılandırması

Kullanıcılarınızın ihtiyaçlarına bağlı olarak, ikincil ayarlarını özelleştirebilirsiniz. yardımcı olur. createAndManageUser() öğesini çağırırken aşağıdaki işaretleri ekleyebilirsiniz:

SKIP_SETUP_WIZARD
Güncellemeleri kontrol eden ve yükleyen yeni kullanıcı kurulum sihirbazını çalıştırmayı atlar, kullanıcıdan Google hizmetleriyle birlikte bir Google Hesabı eklemesini ister ve gerekir. Bu işlem biraz zaman alabilir ve tüm reklamverenler için geçerli olmayabilir. kullanıcıları (ör. herkese açık internet kioskları) kullanabilirsiniz.
LEAVE_ALL_SYSTEM_APPS_ENABLED
Yeni kullanıcıda tüm sistem uygulamalarını etkin durumda bırakır. Bu işareti ayarlamazsanız Yeni kullanıcı, telefonun yapması gereken minimum uygulama grubunu içerir. genellikle bir dosya tarayıcısı, numara çevirici, kişiler ve SMS mesajlarıdır.

Kullanıcı yaşam döngüsünü takip edin

DPC'niz (tamamen yönetilen cihazın yöneticisiyse) şunları yapmak için faydalı olabilir: ne zaman değiştiğini görün. Değişikliklerden sonra takip görevleri çalıştırmak için aşağıdaki geri çağırma yöntemlerini kullanın:DeviceAdminReceiver

onUserStarted()
Sistem bir kullanıcıyı başlattıktan sonra çağrılır. Bu kullanıcı hâlâ kurulum yapıyor olabilir veya arka planda çalışıyor. Kullanıcıyı startedUser üzerinden alabilirsiniz bağımsız değişkendir.
onUserSwitched()
Sistem farklı bir kullanıcıya geçtikten sonra çağrılır. Yeni kullanıcıyı alabilirsiniz Bu işlem artık switchedUser bağımsız değişkeninden ön planda çalışıyor.
onUserStopped()
Kullanıcı çıkış yaptığı için sistem bir kullanıcıyı durdurduktan sonra çağrılır. veya DPC'niz kullanıcıyı durdurdu. Şundan faydalanabilirsiniz: kullanıcıyı stoppedUser bağımsız değişkeninden çağırın.
onUserAdded()
Sistem yeni bir kullanıcı eklediğinde çağrılır. İkincil kullanıcılar genellikle DPC'niz geri arama aldığında tamamen ayarlanır. Kullanıcıyı şuradan alabilirsiniz: newUser bağımsız değişken.
onUserRemoved()
Sistem bir kullanıcıyı sildikten sonra çağrılır. Kullanıcı zaten silinmiş olduğundan removedUser bağımsız değişkeniyle temsil edilen kullanıcıya erişemezsiniz.

Sistemin bir kullanıcıyı ne zaman ön plana getirdiğini veya bir kullanıcıyı arka planda bir alıcı kaydedebilir ACTION_USER_FOREGROUND ve ACTION_USER_BACKGROUND yayın.

Kullanıcıları keşfedin

Tüm ikincil kullanıcıları almak için tümüyle yönetilen bir cihazın yöneticisi telefon edebilir DevicePolicyManager.getSecondaryUsers(). Sonuçlar yöneticinin oluşturduğu tüm ikincil veya geçici kullanıcıları içermelidir. Sonuçlar ayrıca cihazı kullanan bir kişinin ikincil kullanıcıları (veya bir misafir kullanıcıyı) oluşturuyor. İş profilleri dahil değildir, çünkü sonuçlar ikincil kullanıcılar Aşağıdaki örnekte, bu yöntemi nasıl kullanabileceğiniz gösterilmektedir:

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);
}

İkincil kullanıcıların durumunu öğrenmek için başvurabileceğiniz diğer yöntemler şunlardır:

DevicePolicyManager.isEphemeralUser()
Bunun bir ikincil kullanıcı yöneticisi olup olmadığını öğrenmek için yöneticiden bu yöntemi çağırın Geçici kullanıcı.
DevicePolicyManager.isAffiliatedUser()
İkincil bir kullanıcının yöneticisinden bu kullanıcının şu işlemi yapıp yapmadığını öğrenmek için yöntemi çağırın: birincil kullanıcıyla ilişkili olduğundan emin olun. Satış ortaklığı hakkında daha fazla bilgi edinmek için DPC'ye bakın koordinasyon bölümünü inceleyin.

Kullanıcı yönetimi

Kullanıcı yaşam döngüsünü tamamen yönetmek isterseniz cihazın kullanıcıları ne zaman ve nasıl değiştireceği üzerinde ayrıntılı kontrol. Örneğin, cihaz bir süre kullanılmadığında kullanıcıyı silebilir veya gönderilmemiş siparişleri bir kişinin vardiyası bitmeden bir sunucuya gönderebilir.

Çıkış

Android 9.0'da kilit ekranına bir çıkış düğmesi ekledi. Böylece, sonlandırılabilir. Düğmeye dokunduktan sonra sistem, ikincil kullanıcı, geçiciyse kullanıcıyı siler ve birincil kullanıcı görüntüler. Android, birincil kullanıcı Birincil kullanıcı çıkış yapamayacağı için ön planda çalışır.

Android'de oturum sonu düğmesi varsayılan olarak gösterilmez, ancak yöneticiniz ( tümüyle yönetilen bir cihaz) telefon ederek bu özelliği etkinleştirebilir. DevicePolicyManager.setLogoutEnabled(). Gerekirse düğmenin mevcut durumunu onaylama, çağrı DevicePolicyManager.isLogoutEnabled().

İkincil bir kullanıcının yöneticisi, programlı bir şekilde kullanıcının oturumunu kapatıp birincil kullanıcıya yönlendirir. Öncelikle, ikincil ve birincil kullanıcıların ilişkilendirdikten sonra DevicePolicyManager.logoutUser() numaralı telefonu arayın. Eğer oturumu kapalı kullanıcı geçici bir kullanıcıysa, sistem durur ve belirtir.

Kullanıcı değiştir

Farklı bir ikincil kullanıcıya geçiş yapmak için tümüyle yönetilen bir cihazın yöneticisi şunları yapabilir: DevicePolicyManager.switchUser() numaralı telefonu arayın. Kolaylık sağlamak için birincil kullanıcıya geçmek için null öğesini geçirebilir.

Kullanıcıyı durdurma

Tümüyle yönetilen bir cihazın sahibi olan DPC, ikincil bir kullanıcıyı durdurmak için DevicePolicyManager.stopUser(). Durdurulan kullanıcı geçici bir kullanıcı söz konusuysa kullanıcı durdurulur ve ardından silinir.

Cihazın şu sınırının altında kalmak için mümkün olduğunda kullanıcıları durdurmanızı öneririz: Maksimum sayıda çalışan kullanıcınız olmalıdır.

Kullanıcı silme

İkincil bir kullanıcıyı kalıcı olarak silmek için DPC aşağıdakilerden birini çağırabilir DevicePolicyManager yöntem:

  • Tümüyle yönetilen bir cihazın yöneticisi removeUser() numaralı telefonu arayabilir.
  • İkincil kullanıcının bir yöneticisi wipeData() numaralı telefonu arayabilir.

Geçici kullanıcıları çıkış yaptıklarında, durduklarında veya geçiş yaptıklarında sistem silerler gözden kaçırabilirler.

Varsayılan kullanıcı arayüzünü devre dışı bırak

DPC'niz kullanıcıları yönetmek için bir kullanıcı arayüzü sağlıyorsa Android'in yerleşik özelliklerini devre dışı bırakabilirsiniz. Çok kullanıcılı arayüz. Bu işlemi, DevicePolicyManager.setLogoutEnabled() ve DISALLOW_USER_SWITCH kısıtlaması. şu örneği inceleyin:

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);

Cihazı kullanan kişi, Android’in yerleşik kullanıcı arayüzüyle ikincil kullanıcı ekleyemez Tümüyle yönetilen cihazların yöneticileri DISALLOW_ADD_USER kullanıcı kısıtlaması.

Oturum mesajları

Cihazı kullanan kişi yeni bir kullanıcıya geçtiğinde Android, aşağıdakileri yapmak için bir panel gösterir: anahtarı vurgulayın. Android'de aşağıdaki mesajlar gösterilir:

  • Cihaz ikincil bir cihaza geçtiğinde gösterilen kullanıcı oturumunu başlatma mesajı birincil kullanıcıdan alınan bir diğeri de kullanıcı olabilir.
  • Cihaz birincil kullanıcıya döndüğünde gösterilen son kullanıcı oturumu mesajı kullanıcı hesapları ile işlem yapabilirsiniz.

İki ikincil kullanıcı arasında geçiş yapılırken sistem mesajları göstermez.

Mesajlar tüm durumlar için uygun olmayabileceğinden, metinlerini ekleyebilirsiniz. Örneğin, çözümünüz geçici kullanıcı kullanıyorsa oturumlarda, bu durumu iletilere şu şekilde yansıtabilirsiniz: Tarayıcıyı durdurma oturum ve kişisel veriler siliniyor...

Sistem, mesajı birkaç saniye boyunca gösterir. Bu nedenle, kısa ve net bir ifade olmalıdır. Mesajları özelleştirmek için yöneticiniz şu numarayı arayabilir: DevicePolicyManager yöntemleri setStartUserSessionMessage() ve setEndUserSessionMessage() (şu şekilde gösterildiği gibi): şu örneği inceleyin:

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);

Özel mesajlarınızı silmek ve Android'in varsayılan ayarına dönmek için null kartınızı verin mesaj. Mevcut mesaj metnini kontrol etmeniz gerekirse şu numarayı arayın: getStartUserSessionMessage() veya getEndUserSessionMessage().

DPC'niz yerelleştirilmiş mesajları ayarlamalıdır kullanıcının mevcut yerel ayarıdır. Ayrıca, kullanıcının yerel ayarı:

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 koordinasyonu

İkincil kullanıcıları yönetmek için genellikle DPC'nizin iki örneği gerekir; bunlardan biri tümüyle yönetilen cihazda, diğer ise ikincil kullanıcıya ait olur. Oluştururken yeni bir kullanıcı söz konusu olduğunda, tümüyle yönetilen cihazın yöneticisi başka bir kendisini yeni kullanıcının yöneticisi olarak görür.

İlişkili kullanıcılar

Bu geliştirici kılavuzundaki bazı API'ler, yalnızca ikincil kullanıcılar satış ortağı olması gerekir. Android bazı özellikleri devre dışı bıraktığı için (örneğin, ağ günlük kaydı) içerebilir. en kısa sürede kullanıcıları satış ortağı olarak belirlemeniz gerekir. Aşağıdaki örnekte Aşağıdaki ayarları yapın.

Kurulum

tarihinden önce, yeni ikincil kullanıcılar (ikincil kullanıcının sahibi olan DPC'den) ayarlayın kullanabilmelerini sağlamak. Bu kurulumu şuradan yapabilirsiniz: DeviceAdminReceiver.onEnabled() geri arama. Daha önce görüşmedeki gerekli yönetici eklerini createAndManageUser() olarak ayarlarsanız, değerleri intent bağımsız değişkeninden alınır. Aşağıdaki örnekte, bir DPC satış ortağı gösterilmektedir geri çağırmada yeni bir ikincil kullanıcı:

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 ...
}

DPC'ler arasındaki RPC'ler

İki DPC örneği ayrı kullanıcılar altında çalışıyor olsa da DPC'ler ikincil kullanıcılar birbirleriyle iletişim kurabilir. Başka bir DPC'nin hizmetini çağırmak kullanıcı sınırlarını aştığından bindService() numaralı telefonu normalde Android. Şunda çalışan bir hizmete bağlanmak için: başka bir kullanıcı, ara DevicePolicyManager.bindDeviceAdminServiceAsUser().

Birincil kullanıcı ve RPC&#39;leri çağıran ilişkili iki ikincil kullanıcı.
Şekil 2. İlişkili birincil ve ikincil kullanıcıların yöneticileri hizmet yöntemlerini arama
'nı inceleyin.

DPC'niz yalnızca DevicePolicyManager.getBindDeviceAdminTargetUsers(). Aşağıdaki örnekte, yönetici ile bağlantı kuran ikincil bir kullanıcının yöneticisi gösterilmektedir (tümüyle yönetilen cihazın:

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);

Ek kaynaklar

Bir amaca özel ayrılmış cihazlar hakkında daha fazla bilgi edinmek için aşağıdaki dokümanları okuyun: