我想知道设备管理员和配置文件所有者是如何工作的。我遵循了谷歌网站上的一些示例,但我仍然不太了解配置文件所有者的工作原理。
为了测试这一点,我构建了一个示例应用,它将要求用户接受配置文件所有者,然后在没有用户交互的情况下安装证书。
对于配置文件所有者的请求,我在活动中这样做:
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!!!!!");
}
为什么在重新启动应用程序时禁用配置文件所有者?有没有办法避免用户每次打开应用程序时都启用配置文件所有者模式?
此外,如果我使用此机制安装证书,其他应用仍可使用此证书,或者证书仅适用于创建的配置文件?
看起来你不见了:
manager.setProfileEnabled(componentName);
我建议仔细看看下面的一些例子。我不确定isProfileActive()
是做什么的。我会使用:
manager.isProfileOwnerApp(getApplicationContext().getPackage())
创建托管配置文件时,托管配置文件的应用和数据与创建托管配置文件的用户应用/数据是分开的(在大多数情况下,个人与工作)。如果您从原始用户的上下文中打开应用,它将尝试重新设置工作资料。若要以配置文件所有者身份查看应用,需要在托管配置文件的上下文中打开它(你的应用将是"徽章",上面有一个小公文包)。此外,证书等数据将仅限于托管配置文件。
- https://developer.android.com/work/managed-profiles.html
- https://developers.google.com/android/work/build-dpc
一个很好的初始示例: https://github.com/googlesamples/android-BasicManagedProfile
一个更复杂但更完整的示例。它可以配置为设备所有者或配置文件所有者: https://github.com/googlesamples/android-testdpc