【问题标题】:Stop app being restarted in response to a USB event when it's already in the foreground当应用程序已经在前台时,停止应用程序重新启动以响应 USB 事件
【发布时间】:2017-02-19 12:34:59
【问题描述】:

事件:

1.USB设备插入。

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

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

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

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

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

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    应用使用IntentFilterAppChooserLauncher 对话框https://developer.android.com/guide/components/intents-filters.html

    当您在 android.hardware.usb.action.USB_DEVICE_ATTACHED 上使用 IntentFilter 时,总是会发生这种情况。另一种可能性是对话框是 AppChooserlauncher 对话框,当有多个应用程序(或相同/您的应用程序的多个实例)捕获 USB 连接时调用事件 。这就是为什么当您按下 Cancel 时,应用会保持打开状态。

    使用意图过滤器

    要让您的应用程序发现特定的 USB 设备,您可以 指定一个意图过滤器来过滤 android.hardware.usb.action.USB_DEVICE_ATTACHED 意图。随着 这个intent filter,需要指定一个资源文件,指定 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?)

    【讨论】:

    • 感谢您的回复。您需要说明我的代码的哪一部分如何禁用对话框?该对话框由 Android 自动生成。您提供的第二个链接为我提供了与我在问题中尝试过的解决方案基本相同的解决方案(它建议使用:SingleInstance 并且我说我使用了SingleTask)并且我认为这两种模式都不'不停止应用重启。
    • 张贴manifest.xml 以及您使用IntentFilterUSB_DEVICE_ATTACHED 所做的任何事情
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    相关资源
    最近更新 更多