仕事用プロファイルの検出

このガイドでは、デバイスで仕事用プロファイルを検出する方法について説明します。これは、Android Device Policy アプリで管理されている仕事用プロファイルにのみ適用されます。

アプリが仕事用プロファイル内で実行されているかどうかを検出する

次のメソッドは、呼び出し元のアプリが 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");
}

デバイスに仕事用プロファイルがあるかどうかを検出する

デバイスに Android Device Policy アプリによって管理されている仕事用プロファイルがあるかどうかを確認するには、次の方法を使用します。これは、任意の管理モードから呼び出すことができます。個人用プロファイルのアプリから、Android Device Policy アプリによって管理されている仕事用プロファイルが存在する場合、インテント com.google.android.apps.work.clouddpc.ACTION_DETECT_WORK_PROFILE をクエリすると、クロス プロファイル インテントとして解決されます。このメソッドは、そのような仕事用プロファイルが設定されているデバイスの個人用プロファイルから呼び出された場合のみ、true を返します。

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

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