Программирование программ сторонних приложений

После достижения права собственности на устройство, я пытаюсь внедрить метод, позволяющий устройству блокировать любое данное приложение в режиме киоска (или режиме пиннинга экрана). Поскольку у меня есть право собственности на устройство, пользователю не требуется разрешение на это.

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

http://developer.android.com/about/versions/android-5.0.html#ScreenPinning

Программно: Чтобы активировать программную привязку экрана, вызовите функцию startLockTask () из приложения. Если запрашивающее приложение не является владельцем устройства, пользователю предлагается подтвердить его. Приложение владельца устройства может вызывать метод setLockTaskPackages (), чтобы позволить приложениям быть подкрепляемыми без шага подтверждения пользователя.

Это означает, что в качестве приложения владельца устройства я могу подключать другие приложения без подтверждения пользователя … но я понятия не имею, как это сделать.

Я смог разместить свое приложение в закрепленном режиме.

Любая помощь будет оценена по достоинству.

Solutions Collecting From Web of "Программирование программ сторонних приложений"

setLockTaskPackages() используется для определения того, какие приложения (через их имена пакетов) смогут программно быть закреплены без подтверждения пользователя . setLockTaskPackages() вызывается из приложения владельца устройства (скорее всего, в DeviceAdminReceiver onEnabled() .

Итак, в вашем приложении устройства владельца у вас будет что-то вроде:

 mDPM.setLockTaskPackages("com.foo.myapp"); 

И затем в вашем приложении «com.foo.myapp» вы будете авторизованы для вызова:

 startLockTask(); 

Ваше приложение сразу же войдет в режим Pinning без какого-либо подтверждения пользователем.

Если вы сначала не register свое приложение с помощью setLockTaskPackages , приложение будет закреплено, но сначала пользователь должен будет подтвердить.

Также обратите внимание, что когда приложение registered setLockTaskPackages() , оно имеет несколько разных setLockTaskPackages() поведения, чем ручной вывод :

  • Пользователь не может вручную отменить приложение, нажав Back + Recent Apps . Вам придется программно отключить приложение с помощью stopLockTask() ;
  • Кнопки «Главная» и «Недавние приложения» невидимы (не отображаются)
  • Когда приложение отключено (через stopLockTask ()), пользователь сразу вернется в Home: не будет отображаться блокировка экрана, даже если установлен Keyguard (шаблон, код или любой экран Keyguard).

У меня недостаточно репутации для комментария, просто укажу, что для устройств с физическими кнопками (например, Samsung Galaxy Tab A, упомянутых @chairman) одним из способов управления принудительной отменой вашего приложения является реализация в вашем классе DeviceAdminReceiver, следующий:

@Override public void onLockTaskModeExiting (контекст контекста, намерение намерения)

Поэтому, если ваш пользователь хочет использовать эту функцию, вы всегда можете переназначить свое приложение;)

Вот фрагмент кода, который должен вас поймать:

 DevicePolicyManager myDevicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); mDeviceAdminSample = new ComponentName(this, DeviceAdminSample.class); if (myDevicePolicyManager.isDeviceOwnerApp(this.getPackageName())) { // Device owner String[] packages = {this.getPackageName()}; myDevicePolicyManager.setLockTaskPackages(mDeviceAdminSample, packages); } else { // Not a device owner - prompt user or show error } if (myDevicePolicyManager.isLockTaskPermitted(this.getPackageName())) { // Lock allowed startLockTask(); } else { // Lock not allowed - show error or something useful here }