偵測工作資料夾

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