Este guia ilustra 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á em execução em um perfil de trabalho gerenciado pelo app 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");
}
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. Ele 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
precisa
ser resolvida como uma intent entre perfis se um perfil de trabalho gerenciado pelo app
Android Device Policy existir. Esse método só vai retornar true
quando chamado do
perfil pessoal de um dispositivo que tem esse perfil de trabalho.
Android 11 e versões mais recentes:
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();
});
}
Antes do 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");
});
}