Detecção de perfil de trabalho

Este guia mostra como detectar um perfil de trabalho em um dispositivo. Ela se aplica apenas a perfis de trabalho gerenciados pelo app Android Device Policy.

Detectar se o app está sendo executado em um perfil de trabalho

O método abaixo verifica se o app de chamada está sendo executado em um perfil de trabalho gerenciado pelo app Android Device Policy.

Kotlin

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

Detectar se o dispositivo tem um perfil de trabalho

Para determinar se um dispositivo tem um perfil de trabalho gerenciado pelo app Android Device Policy, use o método a seguir. Isso pode ser chamado em qualquer modo de gerenciamento. Em um app no perfil pessoal, a consulta da intent com.google.android.apps.work.clouddpc.ACTION_DETECT_WORK_PROFILE será resolvida como uma intent entre perfis se houver um perfil de trabalho gerenciado pelo app Android Device Policy. Esse método só vai retornar true quando for chamado do perfil pessoal de um dispositivo que tenha um perfil de trabalho.

Android 11 e versões mais recentes:

Kotlin

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

Antes do Android 11:

Kotlin

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