Android设备管理员/个人资料所有者

时间:2017-05-17 11:31:23

标签: android certificate device-admin profile-owner

我正在尝试了解设备管理员和配置文件所有者的工作原理。我跟踪了谷歌网站上的一些例子,但我仍然不太了解个人资料所有者的工作原理。

为了测试这一点,我构建了一个示例应用程序,它将要求用户接受配置文件所有者,然后安装证书而无需用户交互。

对于个人资料所有者的请求,我在我的活动中执行了此操作:

Intent intent = new Intent(ACTION_PROVISION_MANAGED_PROFILE);
intent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, getApplicationContext().getPackageName());
startActivityForResult(intent, REQUEST_PROVISION_MANAGED_PROFILE);

在我的接收器上我有类似的东西:

@Override
public void onProfileProvisioningComplete(Context context, Intent intent) {
    // Enable the profile
    DevicePolicyManager manager =
            (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
    ComponentName componentName = getComponentName(context);
    manager.setProfileName(componentName, context.getString(R.string.profile_name));

    // If I do not do this, the application will not enter in profile mode, and I don't know why 
    Intent launch = new Intent(context, MainActivity.class);
    launch.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(launch);
}

在这里,我不知道为什么我需要重新启动应用程序,以便我可以进入个人资料所有者模式。 虽然,当我让配置文件所有者工作并关闭应用程序并再次启动时,我将无法恢复配置文件所有者模式。

我正在通过在应用程序OnCreate()方法上执行类似的操作来检查配置文件所有者模式是否处于活动状态:

  if (!mDeviceController.isProfileActive()) {
      Log.i("DeviceAdminSample", "Profile is disabled!!!!!");
  }

为什么在重新启动应用程序时禁用配置文件所有者?有没有办法避免用户每次打开应用程序时启用配置文件所有者模式?

此外,如果我使用此机制安装证书,其他应用程序仍然可以使用此证书,或者证书仅适用于创建的配置文件?

1 个答案:

答案 0 :(得分:1)

看起来你错过了:

manager.setProfileEnabled(componentName);

我建议您仔细阅读下面的一些示例。我不确定isProfileActive()是做什么的。我会用:

manager.isProfileOwnerApp(getApplicationContext().getPackage())

创建托管个人资料时,托管个人资料的应用和数据与用户创建托管个人资料的应用/数据(大多数情况下,个人与工作)分开。如果您从原始用户的上下文中打开您的应用,它将尝试再次设置工作资料。要将您的应用视为个人资料所有者,您需要在托管个人资料的上下文中打开它(您的应用将是"徽章",上面有一个小公文包)。此外,您的证书等数据将仅限于您的托管个人资料。

一个很好的初步示例: https://github.com/googlesamples/android-BasicManagedProfile

一个更复杂但更完整的例子。它可以配置为设备所有者或配置文件所有者: https://github.com/googlesamples/android-testdpc