我有没有晴雨表的智能手机,我想通过USB或蓝牙使用连接到我的智能手机的外部气压计。我希望每个已安装的应用程序都能以标准方式使用此baromter,但我不知道是否可行。按照标准方式,我的意思是从google play下载的每个需要气压计的应用程序都可以使用我的外部晴雨表。因此,有应用程序读取测量值并通过Intent分享它的解决方案并不能让我满意。
添加外部GPS更容易,因为android.location.LocationManager类有一个方法addTestProvider所以我可以开发创建TestProvider的应用程序,并通过setTestProviderLocation方法设置从USB /蓝牙读取位置。问题是SensorManager不提供API来添加模拟传感器。
可以将外部气压计连接到Android设备并将测量值分享给所有应用程序。
答案 0 :(得分:4)
外部USB传感器需要Android在插入时支持该设备。然后您需要OTG电缆来反转USB从设备/主设备。无需进入内核构建等...在您的Android设备上安装终端应用程序,插入OTG和传感器,并运行dmesg以查看是否检测到设备并加载了驱动程序。从那里你必须弄清楚你的USB传感器存在什么Linux支持,并努力获得支持到Android内核的路径。
如果你最终必须构建一个新的内核,你也可以完全切换到一个全新的ROM。 CyanogenMod提供完整的源代码,构建脚本和wiki,从头开始构建他们的ROM。一旦安装了新的ROM zip,就可以安全地调整内核并安装软件。
Android内核足够接近直接的Linux内核,只要你的传感器驱动程序的源代码可用,或者它的预编译二进制文件是可用的,那么支持几乎任何在Linux上运行的东西都可以在android上工作。可用。 (也称为专有blob)
最后,假设您的设备带有OTG电缆并且传感器似乎被检测到且驱动程序已加载,您将需要一些工具或应用来实际使用传感器。如果有可用的Linux工具可以执行您想要的操作,请查看是否存在预编译的ARM版本,或者如果源可用,则必须使用Android NDK从源代码编译它们。
为什么我很难解释所有这些?在Android中,蓝牙整体上超级不可靠。你至少还需要Android 5.1。谷歌最初的蓝牙堆栈很垃圾。 (围绕Bluez的包装有各种各样的问题,它适用于某些用途但总体上有稳定性问题)你只需要在非三星设备上使用心率监测器就知道它不会保持连接超过10秒。三星在早期设备中带来了自己的蓝牙堆栈。我使用带心电图读取器的心率监测器开发了认证应用程序,两者都使用蓝牙。一旦我的Nexus5设备升级到5.1,一切都会稳定下来。谷歌的蓝牙问题众所周知。只需谷歌android和蓝牙堆栈实现。
除非你需要无线,否则有线总会更好。
您确实有一些替代USB选项。
1)使用通过USB连接的Arduino或RPi。不需要特殊的Linux驱动程序或内核,但您需要突破设备,它必须连接您的传感器。例如传感器 - > Arduino - >机器人。如果它是一个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
无论如何,祝你好运。