Ce guide explique comment détecter un profil professionnel sur un appareil. Il ne s'applique qu'aux profils professionnels gérés par l'application Android Device Policy.
Détecter si l'application s'exécute dans un profil professionnel
La méthode suivante vérifie si l'application appelante s'exécute dans un profil professionnel géré par l'application 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");
}
Détecter si l'appareil dispose d'un profil professionnel
Pour déterminer si un appareil dispose d'un profil professionnel géré par l'application Android Device Policy, utilisez la méthode suivante. Vous pouvez l'appeler à partir de n'importe quel mode de gestion. À partir d'une application dans le profil personnel, la requête de l'intent com.google.android.apps.work.clouddpc.ACTION_DETECT_WORK_PROFILE
doit se résoudre en tant qu'intent interprofil si un profil professionnel géré par l'application Android Device Policy existe. Cette méthode ne renvoie true
que lorsqu'elle est appelée à partir du profil personnel d'un appareil disposant d'un tel profil professionnel.
Android 11 et versions ultérieures:
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();
});
}
Avant 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");
});
}