Detección del perfil de trabajo

En esta guía, se ilustra cómo detectar un perfil de trabajo en un dispositivo. Solo se aplica a los perfiles de trabajo administrados por la app de Android Device Policy.

Detecta si la app se ejecuta dentro de un perfil de trabajo

El siguiente método verifica si la app que realiza la llamada se ejecuta dentro de un perfil de trabajo administrado por la app de 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");
}

Detecta si el dispositivo tiene un perfil de trabajo

Para determinar si un dispositivo tiene un perfil de trabajo administrado por la app de Android Device Policy, usa el siguiente método. Se puede llamar desde cualquier modo de administración. Desde una app en el perfil personal, la consulta del intent com.google.android.apps.work.clouddpc.ACTION_DETECT_WORK_PROFILE debe resolverse como un intent entre perfiles si existe un perfil de trabajo administrado por la app de Android Device Policy. Este método solo devolverá true cuando se llame desde el perfil personal de un dispositivo que tenga un perfil de trabajo de ese tipo.

Android 11 y versiones posteriores:

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