如何将外部传感器连接到Android设备?

8
我有一部没有气压计的智能手机,我想使用通过USB或蓝牙连接到我的智能手机的外部气压计。我希望每个安装的应用程序都可以以标准方式使用这个气压计,但我不知道是否可能。所谓的标准方式是指从Google Play下载的每个需要气压计的应用程序都可以使用我的外部气压计。因此,读取测量值并通过Intent共享它的应用程序解决方案不符合我的要求。

添加外部GPS更容易,因为有android.location.LocationManager类,其中有一个addTestProvider方法,所以我可以开发应用程序来创建TestProvider并使用setTestProviderLocation方法设置从USB /蓝牙读取的位置。问题是SensorManager没有提供API来添加模拟传感器。

可以将外部气压计连接到Android设备并将测量结果共享给所有应用程序。


1
据我所知,如果没有定制的 ROM 并且该 ROM 知道外部气压计以及其通信协议,则无法将外部气压计连接到 Android 设备并在所有应用程序中共享测量值。 - CommonsWare
1
Android Fit API包括外部BLE传感器,它是否满足您的需求? - Stan
如果传感器兼容的话,可以考虑使用Arduino硬件。看起来在Android和Arduino之间进行通信很容易,可以参考https://www.allaboutcircuits.com/projects/communicate-with-your-arduino-through-android/。 - Remy Mellet
1个回答

5
一个外部的USB传感器需要Android系统支持在插入时检测到设备。然后,您需要一个OTG电缆来反转USB从设备/主机的角色。在不涉及内核构建等操作的情况下,在您的Android设备上安装一个终端应用程序,将OTG和传感器插入,并运行dmesg命令,以查看是否检测到了该设备并加载了驱动程序。从那里开始,您将需要弄清楚Linux对您的USB传感器的支持情况,并制定一条路径将该支持添加到Android内核中。
如果您最终需要构建新内核,那么最好完全切换到全新的ROM。CyanogenMod提供了完整的源代码、构建脚本和wiki,可以从头开始构建他们的ROM。一旦您安装了新的ROM zip,就可以安全地调整内核和已安装的软件。
Android内核与标准Linux内核非常接近,只要传感器驱动程序的源代码或其预编译二进制文件(也称为专有blob)可用,就可以使在Linux上工作的任何东西在android上运行。
最后,假设您有一个带有OTG电缆的设备,传感器似乎已被检测到并加载了驱动程序,那么您将需要一些工具或应用程序来实际使用传感器。如果有可用于Linux的工具可以满足您的需求,请查看它们是否有针对ARM的预编译版本,否则您将需要使用Android NDK从源代码编译它们(如果源代码可用)。
为什么我要解释所有这些?因为在Android上,蓝牙总体而言非常不可靠。此外,您至少需要Android 5.1。谷歌的原始蓝牙堆栈很糟糕。(它是一个围绕Bluez的包装器,存在各种问题,它对某些用途可以正常工作,但整体而言存在稳定性问题)。只需要在非三星设备上使用心率监测器,就会发现它无法保持连接时间超过10秒钟。三星在早期设备中引入了他们自己的蓝牙堆栈。我开发了使用心率监测器和ECG读卡器的身份验证应用程序,两者都使用蓝牙。一旦我的Nexus5设备升级到5.1,一切都稳定了下来。谷歌的蓝牙问题是众所周知的。只需在Google上搜索Android和蓝牙堆栈实现即可。
除非您需要无线连接,否则有线连接总是更好的选择。
您还有一些备选的USB选项。
1)使用通过USB连接的Arduino或RPi。不需要特殊的Linux驱动程序或内核,但您将需要分离设备,并且它将必须作为网关传输您的传感器。例如,传感器-> Arduino-> Android。如果是RPi,您将拥有大约4个USB端口和一个完整的Linux内核可供使用,但根据您的需求,电源可能会成为问题。这里有一个关于如何从应用程序中连接Arduino的绝佳教程:http://www.allaboutcircuits.com/projects/communicate-with-your-arduino-through-android/

2) 使用IOIO OTG分离单元将传感器接入其各种输入端口。您将能够从Java中访问传感器。他们甚至提供了一个应用程序来测试一切。该单元本身还具有电池供电和充电支持,适用于任何有线传感器。您只需将它们连接起来,插入android USB,然后就可以开始使用了。我认为他们即将发布新型号,因为当前的单元已列为停产:https://www.sparkfun.com/news/2069

无论如何,祝你好运。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接