Поставщик управляемых конфигураций 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);

Опять же, посмотрите, как это делается в примере проекта.

Другие вопросы по тегам