6

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

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

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

编码:

@Override
public void onAttachedToWindow()
  {
  this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
  super.onAttachedToWindow();
  }

我能做些什么?

4

2 回答 2

2

对于 android 版本 4(API 14 及更高版本),可能可以使用:getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

但是,在模拟器上,它不会阻止主页按钮,所以它有点没用。我仍然不知道它在真实设备上是否可以正常工作。

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

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

是否可以?如果是这样,如何?


由于 Android Lollipop(版本 5.0,即 API 21),有一种固定屏幕的方式,这可以由用户或应用程序打开(链接在这里):

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

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

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

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

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

不仅如此,根据这篇文章,你也可以在没有用户确认的情况下切换它,退出这个特殊状态将在你的应用程序的逻辑之下。

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

于 2012-01-14T12:05:42.280 回答
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);

    }
于 2015-03-13T21:06:39.453 回答