当应用程序已经在前台

时间:2017-02-19 12:34:59

标签: android android-studio usb android-manifest usb-hostcontroller

活动:

1.USB设备已插入。

  1. 提示符显示:"连接此USB设备时打开appName?"
  2. 按取消 - >应用保持开放状态按好 - > app restarts
  3. 必需行为:应用程序不会显示对话框,并且当应用程序不在前台时自动打开应用程序,或者当应用程序位于前台时然后用户按下即可,应用程序不会重新启动。

    尝试解决方案:我已尝试确保每个活动的启动模式都设置为"SingleTask"。这个解决方案有效here,但当我做同样的事情时,应用程序仍然重新启动。

    简而言之问题:当用户在设备连接时说要打开应用时,如何停止我的应用重启?或者,如何在连接此USB设备时仍然启用我的应用程序时,如何完全停止此提示?

    我已经看到类似的问题,这些问题涉及停止提示,询问是否应该允许该应用访问所连接的设备,但是,我的问题是处理不同的提示。

    提前致谢。

1 个答案:

答案 0 :(得分:0)

该应用使用IntentFilter AppChooserLauncher对话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?