1

事件:

1.USB设备插入。

  1. 出现提示:“连接此 USB 设备时打开 appName?”
  2. 按取消 -> 应用程序保持打开 | 按 OK -> 应用程序重新启动

必需的行为:应用程序要么不显示对话框,而是在它不在前台时自动打开应用程序,或者,当应用程序在前台时,当用户按下确定时,应用程序不会重新启动。

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

简而言之:当用户说在设备连接时打开应用程序时,如何停止我的应用程序重新启动?或者,我如何完全停止此提示,同时在连接此 USB 设备时仍使我的应用程序能够启动?

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

提前致谢。

4

1 回答 1

0

该应用程序使用IntentFilter带有AppChooserLauncher对话框https://developer.android.com/guide/components/intents-filters.html

当您使用IntentFilteron时,总是会发生这种情况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

这是一个内部链接到事件的系统对话框,因此禁用它会很困难。有可能使用 ,https://developer.android.com/guide/topics/manifest/activity-alias-element.html你可以用它来路由意图android.hardware.usb.action.USB_DEVICE_ATTACHED<activity-alias>

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/有没有办法让每个活动只有一个实例?

于 2017-02-19T23:19:38.630 回答