我的问题特别涉及三星Galaxy Camera设备。它附带定制的相机应用程序。我猜三星开发了自己的。由于这个设备可以看作是相机而不是带摄像头的手机,他们似乎认为他们的相机应用程序应该在启动时启动,而其他设备在启动完成后将用户带到主屏幕。
现在,在我们的szenario中,我们使用我们自己的应用程序发送设备,该应用程序具有自己的相机接口。我们可以在自助服务终端模式下运行我们的应用程序,但我们希望允许用户使用其他可能对他的日常工作有帮助的应用程序。
理想情况下,设备应在启动完成后启动主屏幕。然后,用户可以决定启动我们的应用程序或其他应用程序。但如果这是不可能的话,如果我们的应用程序将在启动而不是主屏幕启动(因为用户将通过主页按钮到达主屏幕)也可以。
由于我没有看到任何机会在启动完成后强制显示主屏幕,我尝试默认启动我们自己的应用程序。为了实现这一点,我创建了一个带有以下过滤器的接收器:
<intent-filter android:priority="1000">
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
收到意图后,我开始申请的主要活动。
结果,在启动设备后,Samsungs默认的相机应用程序将首先启动。你会看到他们的主要活动和最烦人的部分:相机镜头将完全伸展。在我们的应用程序自动启动后一瞬间。
我的猜测是,三星相机应用程序也会对启动完成事件作出反应。我们有可能阻止他们的应用程序启动吗?
答案 0 :(得分:1)
我相信这可以实现 - 尽管是在一个错综复杂的庄园 - 没有使用DevicePolicyManager生根。通过使您的应用成为设备管理员并禁用相机,内置相机应用程序将不会在启动时启动(也不会按下相机按钮)。一旦您的应用程序启动,重新启用相机并享受乐趣。
我没有机会创建代码(并且在我有时会更新此答案),但我已经使用Play商店中的DisableCameraDevice应用程序进行了一定程度的测试。使用此应用程序设置,相机应用程序不会在启动时启动,我的应用程序接收BOOT_COMPLETE后几秒钟的主屏幕时间启动。
它也不会停止相机按钮事件(但会停止相机应用程序),所以你可以为此做同样的事情(这似乎也忽略了android:优先级值)。
如果你想更进一步,你甚至可以让你的相机应用程序响应CommonsWare提到的ACTION_MAIN,CATEGORY_HOME意图,并坚持选择它作为主屏幕应用程序。
结合一个不显示主页/后退按钮的全屏应用程序,您可以很好地锁定一个防呆相机给客户。
答案 1 :(得分:0)
相机应用使用附加到接收器的BOOT_COMPLETED权限。它是一个系统应用程序,因此您需要root才能在系统级别对其进行修改。如果您要打包自己的固件,这不是问题。标准启动程序没有标准启动权限,但您的应用程序会。这样可以避免仅通过删除权限而无法启动任何内容的问题。此外,优先级为499最好不超过500。