12

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

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

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

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

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

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

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

+0

Являются ли приложения, которые вы хотите заблокировать или сторонних приложений? – Hartok

+0

@Hartok, приложение, которое я хочу заблокировать, - это сторонние приложения. – kash

ответ

9

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

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

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

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

startLockTask(); 

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

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

заметить также, что, когда приложение registered с setLockTaskPackages(), он имеет несколько различного поведения, чем ручного штифт:

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

можно ли прикрепить другое приложение с помощью метода setLockTaskPackages? –

+0

@FlorentDupont, приложение, которое вы указали, например com.foo.myapp должно быть опубликованным вами приложением, которое должно разрешать скрининг экрана? Может быть, я могу запереть, сказать сердитые птицы ... com.rovio.angrybirds? – kash

+3

@suniljain: no вы не можете подключить другое приложение с помощью setLockTaskPackages. Для этого вам придется использовать «Activity.startLockTask()» другого приложения. @kash yes, в этом примере, 'com.foo.myapp' должен быть опубликован мной. Вы не можете программно заблокировать другое приложение, которое у вас нет. –

0

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

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 
} 
+0

этим мы можем только привязать собственное приложение, но, поскольку kash объяснил, что он хочет привязать другое приложение, возможно ли это с помощью DevicePolicyManager с привилегиями владельца устройства? –

+0

Любой способ привязать другие приложения из нашего приложения. Как мы знаем, дома и последние кнопки будут невидимы. Тогда как можно добраться до какого-либо другого приложения, чтобы подключить его. Как правило, требование заключается в том, чтобы использовать устройство в режиме киоска/приколония для нескольких приложений. – khubaib

+0

Любые предложения ?. – khubaib

3

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

@Override общественности недействительным onLockTaskModeExiting (контекст контекста, Намерение намерения)

Так что если ваш пользователь хочет для открепить вы всегда можете повторно прижав приложение ;)

Смежные вопросы