我有一个应用程序,应该安全幼儿。 这意味着,它可以阻止任何单个按键触摸,但可以处理长按以退出应用程序。 这样,幼儿在玩耍时可以安全地做(太)讨厌的事情。 直到2.3.4版本,我成功实现了这一目标。 但是,现在我有两个问题:
在冰淇淋三明治上(使用模拟器,我仍然没有这个版本的真实设备),在调用下一个代码时,我得到一个甚至无法捕获的异常。 例外:
java.lang.IllegalArgumentException:添加窗口后无法更改窗口类型。
代码:
@Override
public void onAttachedToWindow()
{
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
super.onAttachedToWindow();
}
我该怎么办?
答案 0 :(得分:2)
对于Android版本4(API 14及更高版本),可能会使用: getWindow()的setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
然而,在模拟器上,它不会阻止主页按钮,所以它有点无用。 我仍然不知道它是否在真实设备上正常工作。
也许可以使用下一个解决方法: 将应用程序设置为默认主屏幕应用程序。 如果在应用程序处于活动状态时按下主页按钮,则捕获它并不执行任何操作。 如果在应用程序在后台(或关闭)时按下主页按钮,请打开以前选择的默认主页应用程序。
或者,我可以要求用户在每次启动时将默认的主启动器应用设置为我的,并在关闭后再次将其重置(前一个或完全重置)。
有可能吗? 如果是这样,怎么样?
自Android Lollipop(5.0版本是API 21)以来,有一种屏幕固定方式,用户或应用程序可以打开它(链接here):
有两种方法可以激活屏幕固定:
手动:用户可以在设置>中启用屏幕固定功能安全> 屏幕固定,并通过触摸选择他们想要固定的任务 最近的屏幕中的绿色图钉图标。以编程方式:激活 以编程方式屏幕固定,从您的应用程序调用startLockTask()。 如果请求的应用程序不是设备所有者,则会提示用户 确认。设备所有者应用可以调用setLockTaskPackages() 无需用户确认即可启用应用程序的方法 步骤
它做什么?进一步阅读并查看:
当任务锁定处于活动状态时,会发生以下行为:
状态栏为空白,以及用户通知和状态信息 是隐藏的。主页和最近的应用程序按钮被隐藏。其他应用 无法开展新活动。当前的应用程序可以启动新的 活动,只要这样做不会创建新任务。当屏幕 固定由设备所有者调用,用户仍然锁定您的 应用程序直到应用程序调用stopLockTask()。如果屏幕固定是活动 通过另一个不是设备所有者的应用程序或直接由用户提供的应用程序 用户可以通过按住后退和最近按钮退出。
不仅如此,但根据this post,您还可以在没有用户确认的情况下切换此选项,退出此特殊状态将属于您应用的逻辑。
对于幼儿安全应用程序来说似乎是完美的选择。
答案 1 :(得分:1)
对我来说,下面的代码隐藏了ICS(版本4.4.4)中的主页按钮
public void onCreate(Bundle savedInstanceState) {
this.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION);
super.onAttachedToWindow();
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}