7

我有一个应用程序使用

<uses-feature
        android:name="android.hardware.usb.accessory"
        android:required="true" />

我希望该 USB 与在前台运行的 App1 和在后台运行的 App2 进行通信。App2 在我的后台运行。前台运行的 App1 是由第三方提供的。我将无权访问 App1。
当我尝试这样做时,每当一个应用程序获得访问权限时,另一个应用程序就会失去连接。有没有办法让两个应用程序同时与 USB 通信,

4

2 回答 2

2

尝试这个,

在res/xml/ 目录中创建一个my_accessory_filter.xml 资源文件,其中包含一个标识您的附件的元素。

  <resources>

<usb-accessory model="CoolAccessory" manufacturer="My App Company" version="1.0"/>

</resources>

现在,当您将您的配件连接到设备时,android 将发送一个意图以打开相应的应用程序。最好的部分是多个应用程序可以响应给定的意图,因此多个应用程序可以选择响应同一个附件。

不要忘记在清单中调用my_accessory_filter.xml资源文件,如下所示:

<meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
                android:resource="@xml/my_accessory_filter" />

希望这可以帮助!!

于 2017-11-07T14:02:49.927 回答
0

我很确定这行不通。让我们假设系统允许您这样做(鉴于您的测试,显然情况并非如此)。与 USB 附件通信的方式是使用ParcelFileDescriptor.

要从中读取,您将执行以下操作:

val buffer = ByteArray(16384)
val inStream = FileInputStream(fileDescriptor)

inStream.read(buffer)

如果您有两个应用程序同时读取,它们中的每一个都会读取流的一部分。例如,如果流是“A - B - C - D - E”,则第一个应用程序可能会读取“A - B - E”,而第二个应用程序可能会读取“C - D”。但这绝对不是你想要的。

于 2021-09-30T23:24:30.483 回答