Я прошел требования обеспечения и владения для использования SetLockTaskPackages()
и StartLockTask()
. В эмуляторах StartLockTask()
работает как положено. Экранные кнопки удаляются, и на экране отображается сообщение «Открепление запрещено вашей организацией». отображается на экране.
Этот метод хорошо работает на поддерживаемых устройствах для блокировки пользователя в среде, похожей на киоск. Хотя некоторые устройства, такие как Samsung Galaxy TabA 7 , имеют аппаратные кнопки. Даже если пользователю сообщают «Открепление не разрешено вашей организацией». они все равно могут использовать комбинацию аппаратных кнопок для выхода из приложения.
Мое решение для этого состояло в том, чтобы обнаружить OnLockTaskModeExiting
, а затем уведомить мой MainActivity
о повторном применении моих политик и StartLockTask()
Итак, я сделал EventPasser
класс. Его задача - поднять событие с DeviceAdminReceiver
до моего MainActivity
.
public class EventPasser
{
public static event EventHandler ScreenUnlocked;
public static void RaiseUnlockEvent()
{
EventHandler handler = ScreenUnlocked;
if (null != handler) handler(null, EventArgs.Empty);
}
}
В моем DeviceAdminReceiver
я слушаю OnLockTaskModeExiting
и поднимаю событие, которое прикреплено в моем MainActivity.
public class DeviceAdmin : DeviceAdminReceiver
{
public override void OnLockTaskModeExiting(Context context, Intent intent)
{
base.OnLockTaskModeExiting(context, intent);
// Raise our Unlock Event
EventPasser.RaiseUnlockEvent();
}
}
В моем MainActivity
на OnCreate
я подключаюсь к статическому событию.
EventPasser.ScreenUnlocked += EventPasser_ScreenUnlocked;
Событие просто повторно применяет мои политики блокировки и StartLockTask()
.
private void EventPasser_ScreenUnlocked(object sender, EventArgs e)
{
RegisterAndLock();
}
Это работает очень хорошо, если не считать небольшого раздражения, которое появляется в сообщении «Приложение заблокировано на экране».
Я программист на C #, но еще не разработчик Android. Я очень новичок в Android, и я решил это так, как я знаю, как. Я чувствую, что должен быть в состоянии избежать этого решения о передаче событий Я просто не знаю как.
Есть ли более прямой способ повторно применить мои StartLockTask()
пакеты на OnLockTaskModeExiting
?
Или даже лучше; Есть ли способ заставить StartLockTask()
соблюдать аппаратные кнопки?