Рабочий профиль уже настроен на устройстве?
Если так, то мое приложение владеет профилем?Если нет, какое приложение работает?
Этот код будет работать при запуске под основным пользователем.Владельцем профиля для основного пользователя будет рабочий профиль.Он будет регистрировать ваш собственный пакет, если оно принадлежит вашему приложению.
DevicePolicyManager manager =
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
List<ComponentName> activeAdmins = manager.getActiveAdmins();
if (activeAdmins != null){
for (ComponentName admin : activeAdmins){
String packageName = admin.getPackageName();
if (manager.isProfileOwnerApp(packageName)){
Log.d(TAG, "Work Profile is: " + packageName);
}
}
}
Используйте это, если вы просто хотите проверить, является ли ваше приложение владельцем профиля в вашем приложении.
manager.isProfileOwnerApp(getApplicationContext().getPackage());
Активен ли рабочий профиль?
Если isProfileOwnerApp () возвращает true для какого-либо пакета под основным пользователем, рабочий профиль активен и принадлежит этому пакету.
Вторичные пользователитакже может быть обеспечен владельцем профиля на устройстве, которое поддерживает несколько пользователей, но я пока не видел, как это реализовано в EMM.Владелец устройства должен был бы назначить компонент вашего пакета в качестве владельца профиля вторичного пользователя, так что, вероятно, можно с уверенностью сказать, что этого не произойдет.Но если это так, ваше приложение должно работать так же, как рабочий профиль, но в контексте вторичного пользователя в качестве управляемого профиля.
* РЕДАКТИРОВАТЬ (15.06.18) *:
Я протестировал ваш сценарий на устройстве Android O, и у меня не получилось такого же поведения.После предоставления рабочего профиля из TestDPC, TestDPC обнаружил, что управляемый профиль уже был подготовлен, и не позволил мне обеспечить его снова.
Для какой версии Android вы разрабатываете?
Я покопался в TestDPC и нашел некоторый код, модифицированный для вашего сценария, который может вам помочь.К сожалению, для Android M и ниже, TestDPC не обнаружит, что устройству уже был предоставлен рабочий профиль, и просто попытается снова.Кроме того, я не нашел способа определить, кто этот владелец профиля, ваше приложение или другое приложение.Но я надеюсь, что это поможет!
/**
* @param context Calling activity's context
* @return true, if work profile provisioning is allowed
*/
@TargetApi(Build.VERSION_CODES.N)
public static boolean isProvisioningAllowed(Context context) {
if (BuildCompat.isAtLeastN()) {
DevicePolicyManager dpm = (DevicePolicyManager) context
.getSystemService(Context.DEVICE_POLICY_SERVICE);
return dpm.isProvisioningAllowed(ACTION_PROVISION_MANAGED_DEVICE);
}
else {
return true;
}
}