我已经遍历了供应和所有权要求,以使用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
的{{1}}中,我挂接到了静态事件。
OnCreate
该事件只是重新应用了我的锁定策略和 EventPasser.ScreenUnlocked += EventPasser_ScreenUnlocked;
。
StartLockTask()
从您看到消息“应用程序已锁定在屏幕上”的小烦恼来看,这非常有效。
我是c#程序员,还不是Android开发人员。我是Android的新手,我已经知道了如何解决这个问题。我觉得我应该能够避免这种事件传递解决方案,我只是不知道怎么做。
是否有更直接的方法在 private void EventPasser_ScreenUnlocked(object sender, EventArgs e)
{
RegisterAndLock();
}
上重新应用我的StartLockTask()
软件包?
甚至更好;有没有一种方法可以强制OnLockTaskModeExiting
遵守硬件按钮?