Rilevamento del profilo di lavoro

Questa guida illustra come rilevare un profilo di lavoro su un dispositivo. Si applica solo ai profili di lavoro gestiti dall'app Android Device Policy.

Rileva se l'app è in esecuzione in un profilo di lavoro

Il seguente metodo controlla se l'app chiamante è in esecuzione in un profilo di lavoro gestito dall'app Android Device Policy.

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

Rileva se il dispositivo ha un profilo di lavoro

Per determinare se un dispositivo ha un profilo di lavoro gestito dall'app Android Device Policy, utilizza il seguente metodo. Questo comando può essere chiamato da qualsiasi modalità di gestione. Da un'app nel profilo personale, la query per l'intent com.google.android.apps.work.clouddpc.ACTION_DETECT_WORK_PROFILE dovrebbe essere risolta come intent tra profili se esiste un profilo di lavoro gestito dall'app Android Device Policy. Questo metodo restituirà true solo se viene chiamato dal profilo personale di un dispositivo con un profilo di lavoro di questo tipo.

Android 11 e versioni successive:

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

Prima di Android 11:

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