3

我的问题特别涉及三星 Galaxy 相机设备。它附带一个定制的相机应用程序。我猜三星自己开发的。由于该设备可以被视为相机而不是带相机的手机,因此他们似乎决定他们的相机应用程序应该在启动时启动,而不是其他设备在启动完成后将用户带到主屏幕。

现在,在我们的场景中,我们将设备与我们自己的应用程序一起发布,该应用程序具有自己的相机接口。我们可以在 kiosk 模式下运行我们的应用程序,但我们希望允许用户使用其他可能对他的日常工作也有帮助的应用程序。

所以理想情况下,设备应该在启动完成后启动主屏幕。然后用户可以决定启动我们的应用程序或其他应用程序。但是如果这是不可能的,那么如果我们的应用程序在启动而不是主屏幕上启动也是可以的(因为用户将使用主屏幕按钮到达主屏幕)

由于我没有看到任何机会在启动完成后强制显示主屏幕,因此我尝试默认启动我们自己的应用程序。为了实现这一点,我创建了一个带有以下过滤器的接收器:

<intent-filter android:priority="1000">
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter> 

收到意图后,我启动应用程序的主 Activity。

结果,在启动设备后,三星的默认相机应用程序将首先启动。你会看到他们的主要活动和最烦人的部分:相机镜头将完全展开。在此之后的一瞬间,我们的应用程序会自动启动。

我的猜测是,三星的相机应用程序也会对启动完成事件做出反应。我们有没有可能阻止他们的应用程序启动?

4

2 回答 2

1

我相信这可以实现 - 尽管在一个复杂的庄园 - 无需使用 DevicePolicyManager 生根。通过使您的应用程序成为设备管理员并禁用相机,内置相机应用程序不会在开机时启动(也不会按下相机按钮)。一旦您的应用程序启动,请重新启用相机并享受乐趣。

我没有机会创建代码(并且会在我有的时候更新这个答案),但我已经使用 Play 商店中的 DisableCameraDevice 应用程序进行了一定程度的测试。使用此应用程序设置,相机应用程序不会在启动时启动,而我的接收 BOOT_COMPLETE 的应用程序会在几秒钟的主屏幕时间后启动。

它也不会停止相机按钮事件(但会停止相机应用程序),因此您可以为此执行相同操作(这似乎也忽略了 android:priority 值)。

如果你想走得更远,你甚至可以让你的相机应用程序响应 CommonsWare 提到的 ACTION_MAIN、CATEGORY_HOME 意图并坚持选择它作为主屏幕应用程序。

结合一个不显示主页/返回按钮的全屏应用程序,您可以很好地锁定一个防呆相机给客户。

于 2013-02-23T19:32:47.217 回答
0

相机应用程序使用附加到接收器的 BOOT_COMPLETED 权限。它是一个系统应用程序,因此您需要 root 才能在系统级别对其进行修改。如果您正在打包自己的固件,这将不是问题。标准启动器没有标准启动权限,但您的应用程序会。这将通过简单地删除权限来避免无法启动任何内容的问题。此外,优先级 499 最好落在 500 的限制内。

于 2013-08-04T06:06:26.947 回答