1

我正在开发一个 Android 应用程序,我想与通过 USB 连接的设备进行通信。该设备一直在传输数据。这些数据通过 android linux shell 上的程序可见。

我的目标是在我的应用程序中查看这些数据,然后通过服务将它们传递给其他应用程序。

所以我的问题是:我可以“打开”从我的 Android 应用程序到 USB 端口的连接,以便我继续接收我的应用程序中由 USB 设备发送的数据吗?如果是,代码会是什么样子?

*编辑

感谢您的回答,该应用程序本身不再在命令行上运行。所以它不再是可执行文件,而是一个共享库被我的 android 应用程序加载。它以前做过,但我希望能够在我的应用程序中使用 NDK 方法启动连接,以便能够在我的应用程序本身中查看数据。因此,我尝试查看连接是否已打开。

我在我的代码中添加了一些功能,所以我可以查看 USB 连接是否打开并且我拥有该 USB 设备的权限。

UsbManager.hasPermission(device)

返回 true,因为我正在使用一个 item 过滤器。

UsbManager.openDevice(device)

返回一个 UsbDeviceConnection,所以我似乎有权使用该设备。

到目前为止,我无法通过 USB 设备接收发起总线连接,当然也可以获取该设备的数据输入。

由于我的本机代码已经有一个 while(true) 方法,它仅在实际数据通过我的 USB 设备发送时使用回调将数据发送到我的应用程序,我想在我的 c 代码中完成工作。

我的应用程序应该做的唯一工作是打开一次总线连接,然后准备好从 c 代码回调。

那可能吗?

4

1 回答 1

0

如果您有在命令行上运行的应用程序,您实际上可以在您的应用程序中运行命令行。查看Process类和ProcessBuilder文档以获取完整的详细信息。给出的例子如下

运行 /system/bin/ping 来 ping android.com:

  Process process = new ProcessBuilder()
       .command("/system/bin/ping", "android.com")
       .redirectErrorStream(true)
       .start();
   try {
     InputStream in = process.getInputStream();
     OutputStream out = process.getOutputStream();

     readStream(in);

    finally {
     process.destroy();
   }
 }
于 2013-07-14T17:02:09.507 回答