【问题标题】:Android App continous receiving data via USBAndroid App通过USB持续接收数据
【发布时间】:2013-07-14 14:46:18
【问题描述】:

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

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

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

*编辑

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

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

UsbManager.hasPermission(device)

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

UsbManager.openDevice(device)

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

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

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

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

这可能吗?

【问题讨论】:

  • 通常我会问另一端是“USB 设备”还是“USB 主机”,但听起来你已经有一个可以使用它的命令行工具,所以我们也许可以跳过那我只会问命令行工具是如何做的。如果没有设备节点权限问题,您可以将该工具重构为 JNI 库并从 Android 服务中运行它;如果存在权限问题,您将需要启动一个特权本机守护程序并通过 linux 风格的 IPC 与其对话。或者您可以创建一个自定义组 ID 来拥有设备节点并将其绑定到自定义 android 权限。
  • 该设备是 CAN 总线 - USB 设备。我需要打开一次连接。之后,我的 c 代码中的 while(true) 方法使用回调将数据发送到我的应用程序。通常,执行回调的方法仅用于在命令行上显示数据。如果我将代码更改为可执行文件,那效果很好。我认为它是一个“usb 设备”,因为它仅用于通过 usb 将 CAN-Bus 数据发送到我的 android 设备。我实际上在考虑,如果回调甚至需要任何权限,或者我只需要授予打开我的 CAN-Bus 的权限。

标签: android android-ndk usb


【解决方案1】:

如果您有在命令行上运行的应用程序,您实际上可以在您的应用程序中运行命令行。查看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();
   }
 }

【讨论】:

  • 也许吧。但这很少是最好的解决方案。诉诸它的原因只有几个 - 缺少源、许可防火墙,或者最常见的情况是,需要在轻度黑客设备(使用自定义“su”工具)上以更高特权的用户 ID 运行帮助程序进程,而不是以某种方式处理特定资源的许可的工程项目越多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-29
相关资源
最近更新 更多