4

设置托管配置页面的概述部分说明如下:

应用程序定义了可由管理员远程设置的托管配置选项。这些是可以由托管配置提供程序更改的任意设置。
[...]
托管配置提供程序是在同一设备上运行的另一个应用程序。

然后该页面描述了如何设置托管应用程序,但没有关于以下内容的任何进一步信息:“托管配置提供程序应用程序” - 如果我理解正确,该应用程序负责ACTION_APPLICATION_RESTRICTIONS_CHANGED在配置更改时发送。

我的问题是这个“提供者应用程序”是什么样的应用程序?这个应用程序是否应该实现任何 Android API 以充当配置提供者?这个配套应用程序如何将配置更改挂钩RestrictionsManager,以便托管应用程序能够检索它们?

我在这里问这个是因为不幸的是我在 Android 文档中没有找到任何参考资料。

4

1 回答 1

3

这个“供应商应用程序”是什么样的应用程序?

配置提供程序应用程序是在设备上运行的另一个应用程序。此应用程序通常由管理员控制。管理员将配置更改传达给提供者应用程序,而此应用程序反过来更改托管应用程序上的配置。

查看 BasicManagedProfile 示例:https ://github.com/googlesamples/android-BasicManagedProfile 。这正是这种应用程序。

这个应用程序是否应该实现任何 Android API 以充当配置提供者?

是的,此应用应要求配置托管配置文件:

Intent intent = new Intent(ACTION_PROVISION_MANAGED_PROFILE);
intent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME,
                        activity.getApplicationContext().getPackageName());
if (intent.resolveActivity(activity.getPackageManager()) != null) {
    startActivityForResult(intent, REQUEST_PROVISION_MANAGED_PROFILE);
    activity.finish();
} else {
    Toast.makeText(activity, "Device provisioning is not enabled. Stopping.",
                                                  Toast.LENGTH_SHORT).show();
}

这个配套应用程序如何将配置更改挂钩到 RestrictionsManager,以便托管应用程序能够检索它们?

它使用 DevicePolicyManager 对托管应用实施限制:

DevicePolicyManager manager = (DevicePolicyManager) getActivity().getSystemService(Context.DEVICE_POLICY_SERVICE);

Bundle settings = new Bundle();
settings.putBoolean("downloadOnCellular", true);

manager.setApplicationRestrictions(
        BasicDeviceAdminReceiver.getComponentName(getActivity()),
        PACKAGE_NAME_MANAGED_APP, settings);

再次,看看在示例项目中这是如何完成的。

于 2017-01-24T14:36:36.567 回答