我正在开发一个必须与USB设备通信的Android应用程序。我在http://developer.android.com/guide/topics/connectivity/usb/host.html阅读了文档,并添加了一个intent过滤器和一个设备列表。之后我的应用会在插入设备时检测到该设备并提供自动启动应用程序。如果在插入设备时应用程序已在运行,或者在启动应用程序时设备已插入,则会出现问题。
如果应用已在运行,我会看到一个新的空白窗口。我怀疑它启动了另一个实例并将android:launchMode =“singleTask”添加到我的清单中,但行为没有改变。我想我收到一条错误消息:E / Qt JAVA(6433):未找到Surface 1!
如果我在启动应用时已插入设备,则在尝试打开设备时出现权限错误。
我想要的行为是: - 如果应用未运行时附加dev,请启动应用 - 如果应用程序运行时附加了dev,请检测它并枚举设备 - 如果应用程序运行时dev分离,请在我的代码中检测并处理它
如果我正确地使用了意图过滤器,这一切是否应该可行?
我正在使用Qt开发应用程序,并使用JNI来处理处理usb内容的java代码,如果这是相关信息的话。
答案 0 :(得分:3)
您需要将android:launchMode
设置为singleInstance
,而不是singleTask
。
singleTask
:
系统在新任务的根目录下创建活动并将意图路由到该任务。但是,如果活动的实例已经存在,系统会通过调用onNewIntent()方法将意图路由到现有实例,而不是创建新实例。
singleInstance
:
与" singleTask"相同,除了系统没有将任何其他活动启动到持有实例的任务中。活动始终是其任务的唯一成员。