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