Делегированные области действия API управления Android, похоже, не приобретаются приложением Companion - PullRequest
1 голос
/ 02 мая 2019

Следуя справочнику по Android Management API , мы настроили наше приложение Android Companion таким образом, чтобы оно могло: включать системные приложения, скрывать и отображать пакеты.

Мы добавили следующую информацию в нашу конфигурацию политики:

{
  '
  '
  '
  "applications": [
    {
      "packageName": "com.domain.app",
      "installType": "REQUIRED_FOR_SETUP",
      "defaultPermissionPolicy": "GRANT",
      "delegatedScopes": [
        "ENABLE_SYSTEM_APP",
        "PACKAGE_ACCESS"
      ]
    }
  ],
  '
  '
  '
}

Затем в наше приложение Android Companion мы добавили следующие строки кода в соответствии с документацией Google здесь и здесь :

DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName admin = new ComponentName(mContext, DeviceAdminReceiver.class);

// Iterate through system application package names list
for (String packageName : systemAppsList) {
  if (packageName != null && !packageName.equals("")) {
    try {
      // Re-enable a system app that was disabled by default when the user was initialized
      dpm.enableSystemApp(admin, packageName);

      // Unhide a package (it could be any app : system, managed, etc...)
      dpm.setApplicationHidden(admin, packageName, false);
    } catch (SecurityException e) {
      e.printStackTrace();
      Log.e(TAG, e.getMessage());
    }
  }
}

Мы ожидаем, что на панели запуска Android будут отображаться включенные системные приложения, но Android ловит SecurityException и печатает следующий журнал ошибок:

Нет активного администратора. ComponentInfo {com.domain.app/android.app.admin.DeviceAdminReceiver}

У вас есть идеи о том, что может быть не так?

1 Ответ

3 голосов
/ 17 мая 2019

в вызове метода установите для параметра admin значение null, если вы используете делегированную область, как описано в Документация Android

ComponentName: с каким DeviceAdminReceiver связан этот запрос, илиnull, если вызывающий является делегатом доступа к пакету.Это значение никогда не должно быть нулевым.

немного сбивает с толку, параметр admin может быть установлен на null, если используется делегированная область действия, и в то же время сразу после ... это значение никогда не должно быть нулевым, (ОтличноGoogle)

...