Поставщик управляемых конфигураций Android
Раздел обзора на странице " Настройка управляемых конфигураций" гласит следующее:
Приложения определяют параметры управляемой конфигурации, которые могут быть установлены администратором удаленно. Это произвольные параметры, которые могут быть изменены поставщиком управляемой конфигурации.
[...]
Поставщик управляемых конфигураций - это другое приложение, работающее на том же устройстве.
Затем на странице описывается, как настроить управляемое приложение, но больше нет никакой информации о: "приложении поставщика управляемых конфигураций" - приложении, которое, если я правильно понял, отвечает за отправку ACTION_APPLICATION_RESTRICTIONS_CHANGED
когда конфигурация изменилась.
У меня вопрос, какое приложение это "приложение провайдера"? Есть ли Android API, который должно реализовать это приложение, чтобы выступать в качестве поставщика конфигураций? Как это сопутствующее приложение перехватывает изменения конфигурации в RestrictionsManager
, чтобы управляемое приложение могло их извлекать?
Я спрашиваю об этом здесь, потому что, к сожалению, я не нашел никаких ссылок в документации по Android.
1 ответ
Какое приложение это "приложение провайдера"?
Приложение поставщика конфигураций - это другое приложение, работающее на устройстве. Это приложение обычно контролируется администратором. Администратор сообщает об изменениях конфигурации приложению провайдера, и это приложение, в свою очередь, изменяет конфигурации управляемого приложения.
Взгляните на образец 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);
Опять же, посмотрите, как это делается в примере проекта.