本指南說明如何偵測裝置上的「工作資料夾」。這項設定僅適用於由 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 應用程式管理的工作資料夾,請使用下列方法。您可以從任何管理模式呼叫此方法。如果個人資料夾中的應用程式查詢意圖 com.google.android.apps.work.clouddpc.ACTION_DETECT_WORK_PROFILE
,應將其解析為跨資料夾意圖,前提是存在由 Android Device Policy 應用程式管理的工作資料夾。只有在從設有工作資料夾的裝置個人資料夾中呼叫時,這個方法才會傳回 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");
});
}