Android USB 权限。如何处理附加、分离和已插入

Android usb permissions. How to handle attach, detach and already plugged in

我正在开发一个必须与 USB 设备通信的 android 应用程序。我在 http://developer.android.com/guide/topics/connectivity/usb/host.html 阅读了文档,并添加了一个 intent 过滤器和一个设备列表。之后,我的应用程序会在我插入设备时检测到该设备并自动启动该应用程序。如果设备插入时应用已经运行,或者当我启动应用时设备已经插入,则存在问题。

如果应用程序已经 运行 我得到一个新的空白 window。我怀疑它启动了另一个实例并将 android:launchMode="singleTask" 添加到我的清单中,但行为没有改变。我想我收到一条错误消息:E/Qt JAVA ( 6433): Surface 1 not found!

如果我启动应用程序时设备已经插入,我在尝试打开设备时会收到权限错误。

我想要的行为是: - 如果在应用程序未 运行 时附加开发人员,请启动应用程序 - 如果应用 运行 时附加了开发,检测它并枚举设备 - 如果 dev 在应用 运行 时分离,请在我的代码

中检测并处理它

如果我做对了,所有这些都应该只用 intent 过滤器就可以实现吗?

我正在使用 Qt 开发应用程序,并使用 JNI 连接 java 处理 USB 内容的代码,如果这是相关信息的话。

您需要将 android:launchMode 设置为 singleInstance,而不是 singleTask

来自the documentation

singleTask:

The system creates the activity at the root of a new task and routes the intent to it. However, if an instance of the activity already exists, the system routes the intent to existing instance through a call to its onNewIntent() method, rather than creating a new one.

singleInstance:

Same as "singleTask", except that the system doesn't launch any other activities into the task holding the instance. The activity is always the single and only member of its task.