Android App通过USB连续接收数据

时间:2013-07-14 14:46:19

标签: android android-ndk usb

我正在开发一款Android应用程序,我希望与通过USB连接的设备进行通信。该设备始终提供数据。使用android linux shell上的programm可以看到这些数据。

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

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

*编辑

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

我已经为我的代码添加了一些功能,所以我可以看看usb-connection是否已打开并且我拥有该usb设备的权限。

UsbManager.hasPermission(device)

返回true,因为我正在使用itent过滤器。

UsbManager.openDevice(device)

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

到目前为止,我无法通过usb-device接收到总线连接,当然还要获取该设备的数据输入。

由于我的本机代码已经有一段时间(真实) - 方法,当实际数据通过我的usb-device发送时,我只想使用回调将数据发送到我的应用程序,我想在我的c代码中完成工作。

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

这可能吗?

1 个答案:

答案 0 :(得分: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();
   }
 }