Android - 如何暂时禁用主页按钮并重新创建Car Home和Toddler Lock所做的操作?

时间:2011-06-11 23:07:16

标签: android

所以我尝试做许多人之前尝试过的事情:创建一个不响应Home按钮的应用程序。我看过很多关于SO的类似问题,但没有一个像我想要的那样工作。

我试过的一件事就是让我的应用程序基本上是另一个启动器。 (注意:需要少量用户输入才能使其正常工作。)

从我的应用程序的清单:

<category android:name="android.intent.category.DEFAULT" />       
<category android:name="android.intent.category.HOME" />

我也禁用了后退按钮,并将启动模式设为“singleInstance。”

我认为Toddler Lock做了类似的事情,但我的实现方式并不完全相同。使用我的实现,我的应用程序作为默认的主启动器存在,无限期地包括在退出应用程序之后。有没有办法在Application Manifest以外的地方声明相同的行为,可以暂时打开它,也可以在退出应用程序时关闭它?

Car Home也做了类似的事情,实际上它比Toddler Lock更好。我不确定它是如何做到的(也许它有更多的权限,因为它是一个原生应用程序),但它设法做同样的事情,而不要求用户接受备用启动器或选择应用程序作为默认启动器。任何人都知道它是如何做到的?

2 个答案:

答案 0 :(得分:2)

hackbod基本上是正确的。

我已经得到了很多理想的行为
  1. 制作“捕获主页”活动 如问题中所述。这个 不是主要的活动 程序
  2. 在清单中,禁用它。
  3. 在应用中,启用“捕获主页” 关键“你想要家的活动 捕获发生,并禁用它 当你想退出时。
  4. 唯一的问题是捕获主页活动应该实际执行的操作。在我的情况下,我需要它只是去应用程序的开始...所以它制造CATEGORY_HOME意图,测试它正确解析,如果是这样,转发到应用程序。如果它无法正确解析,它会通知用户,等待用户准备好,然后使用该意图。这样,如果用户选择了您的应用但未将其设为默认值,则会再次收到提示。

答案 1 :(得分:1)

要在用户将应用程序作为主应用程序启用后禁用此功能,请使用PackageManager.setComponentEnabledSetting()禁用该活动。请注意,这意味着覆盖主页的活动不应该是您应用的主要活动,否则在禁用它后,用户将无法返回您的应用。

CarHome非常不同 - 当Android处于不同的UI模式时(在用于汽车模式的汽车中或用于桌面模式的桌面底座上),当用户按下主页以便他们可以启动时,将启动不同的Intent在那种环境中有一个不同的“家”。如果您没有编写汽车模式主屏幕,则不应使用此功能。