Есть ли способ внести приложения в белый список для режима блокировки задач с помощью команд ADB вместо диспетчера политик устройств?

Я использую startLockTask(); в моем приложении, который блокирует мою текущую задачу / действие. Мое приложение также является владельцем устройства, и с помощью следующего кода я добавляю свой пакет приложения в белый список для режима блокировки перед вызовом startLockTask();

try
{
   String PLAYER_PACKAGE = this.getPackageName();
   String[] APP_PACKAGES = {PLAYER_PACKAGE};

   DevicePolicyManager dpm = (DevicePolicyManager) this.getSystemService(Context.DEVICE_POLICY_SERVICE);
   ComponentName mDeviceAdmin = new ComponentName(this, DeviceAdminSampleReceiver.class);

   if(!dpm.isDeviceOwnerApp(this.getPackageName())){
       return;
   }

   // Whitelist app package for LockTask mode
   dpm.setLockTaskPackages(mDeviceAdmin, APP_PACKAGES);

   // First, confirm that this package is whitelisted to run in lock task mode.
   if (dpm.isLockTaskPermitted(this.getPackageName())) {
         this.startLockTask();

         // Enable the Home and Overview buttons so that our custom launcher can respond
         // using our custom activities. Implicitly disables all other features.
         dpm.setLockTaskFeatures(mDeviceAdmin,
                        DevicePolicyManager.LOCK_TASK_FEATURE_HOME |
                                DevicePolicyManager.LOCK_TASK_FEATURE_KEYGUARD |
                                DevicePolicyManager.LOCK_TASK_FEATURE_OVERVIEW);
    }
}catch (Exception e){}

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

dpm.setLockTaskPackages(mDeviceAdmin, APP_PACKAGES);

Итак, мне интересно, существует ли эквивалентный метод для достижения того же поведения, что и "dpm.setLockTaskPackages", с использованием некоторых команд ADB.

Спасибо.

1 ответ

Почему вы не делаете разрешение администратора устройства обязательным для этой части? что-то подобное в вашей деятельности:

compName = new ComponentName(this, AppAdminReceiver.class);

Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, compName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "Explain why we need this permission");
startActivityForResult(intent, RESULT_ENABLE);

DevicePolicyManager manager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
   
if(manager != null && manager.isAdminActive(compName)) {
    // Device Admin

}else {
    // Not Device Admin
    // Go back to previous Activity

}

Редактировать:

Чтобы установить приложение в качестве владельца устройства с помощью ADB, вы можете использовать команду:

dpm set-device-owner com.package.name/.Package.DeviceOwnerReceiver 

Обратите внимание, что если вы установите приложение как владелец устройства, вы не сможете удалить его, пока не сбросите настройки телефона.

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