このガイドでは、デバイスで仕事用プロファイルを検出する方法について説明します。これは、Android Device Policy アプリで管理されている仕事用プロファイルにのみ適用されます。
アプリが仕事用プロファイル内で実行されているかどうかを検出する
次のメソッドは、呼び出し元のアプリが 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");
}
デバイスに仕事用プロファイルがあるかどうかを検出する
デバイスに Android Device Policy アプリによって管理されている仕事用プロファイルがあるかどうかを確認するには、次の方法を使用します。これは、任意の管理モードから呼び出すことができます。個人用プロファイルのアプリから、Android Device Policy アプリによって管理されている仕事用プロファイルが存在する場合、インテント com.google.android.apps.work.clouddpc.ACTION_DETECT_WORK_PROFILE
をクエリすると、クロス プロファイル インテントとして解決されます。このメソッドは、そのような仕事用プロファイルが設定されているデバイスの個人用プロファイルから呼び出された場合のみ、true
を返します。
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.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 より前:
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");
});
}