В этом руководстве показано, как определить рабочий профиль на устройстве. Это применимо только к рабочим профилям, управляемым приложением Android Device Policy.
Определите, работает ли приложение внутри рабочего профиля.
Следующий метод проверяет, работает ли вызывающее приложение в рабочем профиле, управляемом приложением Android Device Policy.
fun isInsideWorkProfile(): Boolean {
val devicePolicyManager = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
return devicePolicyManager.isProfileOwnerApp("com.google.android.apps.work.clouddpc")
}
boolean isInsideWorkProfile() {
DevicePolicyManager devicePolicyManager = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
return devicePolicyManager.isProfileOwnerApp("com.google.android.apps.work.clouddpc");
}
Определить, есть ли у устройства рабочий профиль
Чтобы определить, имеет ли устройство рабочий профиль, управляемый приложением Android Device Policy, используйте следующий метод. Это можно вызвать из любого режима управления. Запрос намерения com.google.android.apps.work.clouddpc.ACTION_DETECT_WORK_PROFILE
из приложения в личном профиле должен разрешаться как межпрофильное намерение, если существует рабочий профиль, управляемый приложением Android Device Policy. Этот метод вернет true
только при вызове из личного профиля устройства, имеющего такой рабочий профиль.
Android 11 и более поздние версии:
fun hasWorkProfile(): Boolean {
val intent = Intent("com.google.android.apps.work.clouddpc.ACTION_DETECT_WORK_PROFILE")
val activities = context.packageManager.queryIntentActivities(intent, 0)
return activities.any { it.isCrossProfileIntentForwarderActivity }
}
boolean hasWorkProfile() {
Intent intent = new Intent("com.google.android.apps.work.clouddpc.ACTION_DETECT_WORK_PROFILE");
List<ResolveInfo> activities = context.getPackageManager().queryIntentActivities(intent, 0);
return activities.stream()
.anyMatch(
(ResolveInfo resolveInfo) -> {
return resolveInfo.isCrossProfileIntentForwarderActivity();
});
}
До Android 11:
fun hasWorkProfile(): Boolean {
val intent = Intent("com.google.android.apps.work.clouddpc.ACTION_DETECT_WORK_PROFILE")
val activities = context.packageManager.queryIntentActivities(intent, 0)
return activities.any { it.activityInfo.name == "com.android.internal.app.ForwardIntentToManagedProfile" }
}
boolean hasWorkProfile() {
Intent intent = new Intent("com.google.android.apps.work.clouddpc.ACTION_DETECT_WORK_PROFILE");
List<ResolveInfo> activities = context.getPackageManager().queryIntentActivities(intent, 0);
return activities.stream()
.anyMatch(
(ResolveInfo resolveInfo) -> {
return resolveInfo.activityInfo.name.equals("com.android.internal.app.ForwardIntentToManagedProfile");
});
}