在安卓上的小孩安全app

and*_*per 6 android key block android-3.0-honeycomb android-4.0-ice-cream-sandwich

我有一个应用程序,应该是幼儿安全.这意味着,它可以阻止任何单个按键触摸,但可以处理长按以退出应用程序.这样,幼儿在玩耍时可以安全地做(太)讨厌的事情.直到2.3.4版本,我成功实现了这一目标.但是,现在我有两个问题:

  1. 在蜂窝状态下,我有状态栏通知,可以按下.另外,我有可以按下的开关窗口键.我唯一成功的就是调暗状态栏.
  2. 在冰淇淋三明治(使用模拟器,我仍然没有这个版本的真实设备),当调用下一个代码时,我得到一个甚至无法捕获的异常.例外:

    java.lang.IllegalArgumentException:添加窗口后无法更改窗口类型.

代码:

@Override
public void onAttachedToWindow()
  {
  this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
  super.onAttachedToWindow();
  }
Run Code Online (Sandbox Code Playgroud)

我能做什么?

and*_*per 2

对于 Android 版本 4(API 14 及更高版本),可以使用:

getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
Run Code Online (Sandbox Code Playgroud)

然而,在模拟器上,它不会阻止主页按钮,所以它有点无用。

我仍然不知道它在真实设备上是否可以正常工作。

也许可以使用以下解决方法:将应用程序设置为默认主屏幕应用程序。如果在应用程序处于活动状态时按下主页按钮,则捕获它并且不执行任何操作。如果在应用程序处于后台(或关闭)时按下主页按钮,则打开之前选择的默认主页应用程序。

或者,我可以要求用户在每次启动时将默认的主启动器应用程序设置为我的,并在关闭后再次重置它(可以是前一个,也可以完全重置)。

是否可以?如果是这样,怎么办?


Android 5.0 (Lollipop)(版本 5.0,即 API 21)开始,有一种屏幕固定方式,并且可以由用户或应用程序打开(此处链接):

有两种方法可以激活屏幕固定:

手动:用户可以在“设置”>“安全”>“屏幕固定”中启用屏幕固定,并通过触摸最近使用的屏幕中的绿色固定图标来选择要固定的任务。以编程方式:要以编程方式激活屏幕固定,请从应用程序中调用 startLockTask()。如果请求的应用程序不是设备所有者,系统会提示用户进行确认。设备所有者应用程序可以调用 setLockTaskPackages() 方法,使应用程序无需用户确认步骤即可固定。

它有什么作用?进一步阅读并查看:

当任务锁定处于活动状态时,会发生以下行为:

状态栏为空白,并且隐藏用户通知和状态信息。“主页”和“最近使用的应用程序”按钮被隐藏。其他应用程序无法启动新活动。当前的应用程序可以启动新的活动,只要这样做不会创建新的任务。当设备所有者调用屏幕固定时,用户将保持锁定到您的应用程序,直到应用程序调用 stopLockTask()。如果屏幕固定是由非设备所有者的另一个应用程序或用户直接进行的活动,则用户可以通过按住“后退”和“最近使用”按钮退出。

不仅如此,根据这篇文章,您还可以在无需用户确认的情况下切换此状态,并且退出此特殊状态将根据您的应用程序的逻辑进行。

这似乎是幼儿安全应用程序的完美选择。