活动:
1.USB设备已插入。
必需行为:应用程序不会显示对话框,并且当应用程序不在前台时自动打开应用程序,或者当应用程序位于前台时然后用户按下即可,应用程序不会重新启动。
尝试解决方案:我已尝试确保每个活动的启动模式都设置为"SingleTask"
。这个解决方案有效here,但当我做同样的事情时,应用程序仍然重新启动。
简而言之问题:当用户在设备连接时说要打开应用时,如何停止我的应用重启?或者,如何在连接此USB设备时仍然启用我的应用程序时,如何完全停止此提示?
我已经看到类似的问题,这些问题涉及停止提示,询问是否应该允许该应用访问所连接的设备,但是,我的问题是处理不同的提示。
提前致谢。
答案 0 :(得分:0)
该应用使用IntentFilter
AppChooser
或Launcher
对话https://developer.android.com/guide/components/intents-filters.html
当您在IntentFilter
上使用android.hardware.usb.action.USB_DEVICE_ATTACHED
时,总会发生这种情况。另一种可能性是对话框是 AppChooser 或启动器对话框,当有多个应用程序(或同一个/您的应用程序的多个实例)捕获USB连接时调用该对话框事件。这就是为什么当您按Cancel
时应用程序保持打开状态。
使用意图过滤器
要让您的应用程序发现特定的USB设备,您可以 指定一个意图过滤器来过滤
android.hardware.usb.action.USB_DEVICE_ATTACHED
意图。随着 此意图过滤器,您需要指定指定的资源文件 USB设备的属性,例如产品和供应商ID。 :当 用户连接与您的设备过滤器匹配的设备,即系统 向他们展示一个对话框,询问他们是否想要启动你的 应用即可。如果用户接受,您的应用程序将自动拥有 在设备断开连接之前访问设备的权限。
https://developer.android.com/guide/topics/connectivity/usb/host.html
这是一个系统对话框,内部链接到android.hardware.usb.action.USB_DEVICE_ATTACHED
事件,因此禁用它很困难。可以使用<activity-alias>
,https://developer.android.com/guide/topics/manifest/activity-alias-element.html 路由意图:
http://www.stackoverflow.com/questions/40182096/usb-permissions-without-prompt/40182413#40182413
http://blog.danlew.net/2014/01/16/preserve-your-launchers-use-activity-alias/ (Is there any way to have one and only one instance of each activity?)