Deteksi profil kerja

Panduan ini menggambarkan cara mendeteksi profil kerja di perangkat. Hal ini hanya berlaku untuk profil kerja yang dikelola oleh aplikasi kebijakan Perangkat Android.

Mendeteksi apakah aplikasi berjalan di dalam profil kerja

Metode berikut memeriksa apakah aplikasi panggilan berjalan dalam profil kerja yang dikelola oleh aplikasi 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");
}

Mendeteksi apakah perangkat memiliki profil kerja

Untuk menentukan apakah perangkat memiliki profil kerja yang dikelola oleh aplikasi Android Device Policy, gunakan metode berikut. Ini dapat dipanggil dari mode pengelolaan apa pun. Dari aplikasi di profil pribadi, kueri untuk intent com.google.android.apps.work.clouddpc.ACTION_DETECT_WORK_PROFILE harus di-resolve sebagai intent lintas profil jika ada profil kerja yang dikelola oleh aplikasi Android Device Policy. Metode ini hanya akan menampilkan true saat dipanggil dari profil pribadi perangkat yang memiliki profil kerja tersebut.

Android 11 dan yang lebih baru:

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

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