Администратор устройства Android / владелец профиля

Я пытаюсь узнать, как работает администратор устройства и владелец профиля. Я следовал некоторым примерам с сайта Google, но до сих пор не совсем понимаю, как работает владелец профиля.

Чтобы проверить это, я создал образец приложения, которое попросит пользователя принять владельца профиля, а затем установит сертификат без взаимодействия с пользователем.

По просьбе владельца профиля я проделал это со своей активностью:

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!!!!!");
  }

Почему владелец профиля отключен, когда я перезапускаю приложение? Есть ли способ избежать включения пользователем режима владельца профиля каждый раз, когда он открывает приложение?

Кроме того, если я установлю сертификат с этим механизмом, другие приложения все равно смогут использовать этот сертификат, или сертификат будет работать только для созданного профиля?


person iGoDa    schedule 17.05.2017    source источник


Ответы (1)


Похоже, вас не хватает:

manager.setProfileEnabled(componentName);

Я рекомендую присмотреться к некоторым из приведенных ниже примеров. Я не уверен, что делает isProfileActive(). Я хотел бы использовать:

manager.isProfileOwnerApp(getApplicationContext().getPackage())

Когда вы создаете управляемый профиль, приложения и данные управляемого профиля отделены от приложений / данных пользователя, которые создали управляемый профиль (в большинстве случаев личные, а не рабочие). Если вы откроете свое приложение из исходного контекста пользователя, оно снова попытается настроить рабочий профиль. Чтобы увидеть свое приложение в качестве владельца профиля, вам нужно открыть его в контексте управляемого профиля (ваше приложение будет «значком», на нем будет небольшой портфель). Кроме того, такие данные, как ваши сертификаты, будут ограничены вашим управляемым профилем.

Хороший начальный пример для подражания: https://github.com/googlesamples/android-BasicManagedProfile

Гораздо более сложный, но более полный пример. Его можно настроить как владельца устройства или владельца профиля: https://github.com/googlesamples/android-testdpc

person Steve Miskovetz    schedule 23.05.2017