android - StartLockTask 因硬件按钮而失败
问题描述
我已经完成了使用SetLockTaskPackages()
和StartLockTask()
. 在模拟器中StartLockTask()
按预期工作。屏幕上的按钮已删除,并显示“您的组织不允许取消固定”消息。显示在屏幕上。
此方法似乎在支持的设备上运行良好,可将用户锁定在类似信息亭的环境中。尽管某些设备(例如三星 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();
}
除了您看到消息“应用程序锁定在屏幕上”的小烦恼之外,这非常有效。
我是 ac# 程序员,还不是 Android 开发人员。我对 Android 很陌生,我已经以我知道的方式解决了这个问题。我觉得我应该能够避免这个事件传递解决方案,我只是不知道如何。
有没有更直接的方法来重新申请我的StartLockTask()
包裹OnLockTaskModeExiting
?甚至更好;有没有办法强制StartLockTask()
尊重硬件按钮?
解决方案
推荐阅读
- arrays - 错误 - [-Werror,-Wunused-value] - 不知道是什么意思
- java - 为什么我可以在框架上绘制但不能在容器内绘制?
- spring-boot - springfox-boot-starter:3.0.0。无法在全局请求参数中设置默认值
- javascript - 如何将对象/字符串与循环函数节点 js 进行比较?
- python - 将音频添加到剪辑
- discord.py - ModMail Bot 不断为每条消息打开通道 Discord.Py
- python - bs4 - 如何只找到带有引号的段落?
- javascript - 如何将图像 ID 作为函数参数发送?
- python-3.x - 当每个函数相互依赖时使用 Celery 列表输出
- python - 在 Python 中创建方法