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.

Rilevare se l'app è in esecuzione all'interno di un profilo di lavoro

Il seguente metodo verifica se l'app chiamante è in esecuzione all'interno di un profilo di lavoro gestito dall'app 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");
}

Rilevare 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. 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 deve essere risolta come un intent tra profili se esiste un profilo di lavoro gestito dall'app Android Device Policy. Questo metodo restituirà true solo se chiamato dal profilo personale di un dispositivo che ha un profilo di lavoro di questo tipo.

Android 11 e versioni successive:

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

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