Экранное закрепление сторонних приложений программно
После получения права собственности на устройство я пытаюсь реализовать метод, позволяющий устройству заблокировать любое приложение в режиме киоска (или в режиме закрепления экрана). Поскольку у меня есть право собственности на устройство, у пользователя не запрашивается разрешение на это.
С веб-сайта разработчика, краткое описание говорит мне, что можно сделать то, что я пытаюсь:
http://developer.android.com/about/versions/android-5.0.html
Программно: чтобы программно активировать закрепление экрана, вызовите startLockTask() из вашего приложения. Если запрашивающее приложение не является владельцем устройства, у пользователя запрашивается подтверждение. Приложение владельца устройства может вызвать метод setLockTaskPackages(), чтобы приложения могли быть прикреплены без шага подтверждения пользователя.
Это означает, что, как приложение владельца устройства, я могу прикреплять другие приложения без подтверждения пользователя... но я понятия не имею, как это сделать.
Я смог перевести свое приложение в режим закрепления.
Любая помощь будет оценена.
3 ответа
setLockTaskPackages()
используется, чтобы указать, какие приложения (через их имена пакетов) смогут программно закрепляться без подтверждения пользователя. setLockTaskPackages()
вызывается из вашего приложения владельца устройства (скорее всего, в вашем DeviceAdminReceiver
"s onEnabled()
метод).
Итак, в приложении для вашего владельца устройства у вас будет что-то вроде:
mDPM.setLockTaskPackages("com.foo.myapp");
и тогда в вашем приложении "com.foo.myapp" вы будете авторизованы для вызова:
startLockTask();
Ваша заявка сразу перейдет в режим закрепления, без подтверждения пользователя.
Если вы не первый register
ваше заявление с setLockTaskPackages
приложение будет закреплено, но пользователь должен будет подтвердить сначала.
Также обратите внимание, что когда приложение registered
с setLockTaskPackages()
, он имеет несколько другое поведение, чем ручной вывод:
- пользователь не может открепить приложение вручную, нажав " Назад" + " Последние приложения". Вам придется программно открепить ваше приложение с
stopLockTask()
; - Кнопки "Домой" и "Последние приложения" невидимы (не отображаются)
- Когда приложение откреплено (с помощью stopLockTask()), пользователь сразу вернется в "Домой": блокировка экрана не отображается, даже если установлена защита клавиатуры (шаблон, код или любой другой экран клавиатуры).
У меня недостаточно репутации для комментария, просто хочу указать, что для устройств с физическими кнопками (например, 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
}