Обнаружение рабочего профиля

В этом руководстве показано, как обнаружить рабочий профиль на устройстве. Оно применимо только к рабочим профилям, управляемым приложением «Политика устройства Android».

Определите, работает ли приложение в рамках рабочего профиля.

Следующий метод проверяет, работает ли вызывающее приложение в рамках рабочего профиля, управляемого приложением «Политика устройств Android».

Котлин

fun isInsideWorkProfile(): Boolean {
  val devicePolicyManager = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager

  return devicePolicyManager.isProfileOwnerApp("com.google.android.apps.work.clouddpc")
}

Java

boolean isInsideWorkProfile() {
  DevicePolicyManager devicePolicyManager = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);

  return devicePolicyManager.isProfileOwnerApp("com.google.android.apps.work.clouddpc");
}

Определите, есть ли у устройства рабочий профиль.

Чтобы определить, есть ли у устройства рабочий профиль, управляемый приложением «Политика устройств Android», используйте следующий метод. Его можно вызвать из любого режима управления. Если рабочий профиль, управляемый приложением «Политика устройств Android», то при вызове из приложения в личном профиле запрос интента com.google.android.apps.work.clouddpc.ACTION_DETECT_WORK_PROFILE должен рассматриваться как межпрофильный интент, если существует рабочий профиль, управляемый приложением «Политика устройств Android». Этот метод вернет 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 }
}

Java

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

Java

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