我一直在询问有关我的Android项目的一系列不断变化的问题,这些问题会不断地实时绘制蓝牙数据.而且我在提问方面做得不是很好.
所以我需要做的是编辑这个问题,清理它,添加重要的细节,最重要的是我需要添加相关代码段的代码片段,特别是我已经黑了很多的部分,并提供有关这些的解释代码段.那样也许我可以得到一个答案:我的问题/关注点是:我目前的解决方案是否合适?是否会在我添加新功能时保持不变?
基本上我已经完成的是通过拼凑一些开源代码Blueterm和OrientationSensor来创建我的应用程序的第一个版本.
有人建议我添加一个线程,一个处理程序,一个服务,或使用异步任务,或AIDL等.但我已经决定我不想修改或替换我现有的解决方案,除非我真的应该.主要是我想知道它是否足以继续前进并扩展它以添加其他功能.
顺便说一句,我之前称之为BluetoothData的只是蓝牙数据:它是从远程蓝牙设备接收的16位数据,速率为2到10个样本/秒.我的应用程序基本上是一个数据采集系统,可以获取/接收蓝牙数据并绘制它.
这是我开始使用的Blueterm开源代码的描述(参见上面的链接).Blueterm基本上是一个通过蓝牙进行通信的终端仿真器程序.它由几项活动组成,Blueterm是最重要的.它发现,配对并连接支持SPP/RfComm的远程蓝牙设备.连接后,我可以使用Blueterm配置远程设备,方法是发送命令打开采样,更改要采样的通道数(到一个通道),更改为输入数据的格式(我喜欢逗号分隔数据)等
这是我开始使用的OrientationSensorExample开源代码的描述(参见上面的链接).它基本上是AnroidPlot库的一个示例应用程序.OrientationSensor活动实现SensorEventListener.这包括重写onSenorChanged(),每当获取新的方向传感器数据时调用它,并重绘图形.
将这两个开源项目(Blueterm和OrientationSensorExample)拼凑成一个应用程序(Blueterm),这里描述了整个应用程序(Blueterm)的工作原理.当我启动Blueterm时,整个屏幕模拟一个漂亮的蓝色终端.从选项菜单中我发现,配对,连接和配置远程蓝牙设备,如上所述.配置好远程设备后,再次进入选项菜单,选择"绘图数据",启动绘图活动.终端模拟器消失了,Plot活动中出现了一个很好的滚动实时图.
这就是我这样做的方式.在onOptionsItemSelected()中,我添加了一个案例来启动Plot活动,如下所示:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.connect:
if (getConnectionState() == BluetoothSerialService.STATE_NONE) {
// Launch the DeviceListActivity to see devices and do scan
Intent serverIntent = new Intent(this, DeviceListActivity.class);
startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE);
}
else
if (getConnectionState() == BluetoothSerialService.STATE_CONNECTED) {
mSerialService.stop();
mSerialService.start();
}
return true;
case R.id.preferences:
doPreferences();
return true;
case R.id.menu_special_keys:
doDocumentKeys();
return true;
case R.id.plot_data:
doPlotData();
return true;
}
return false;
} …Run Code Online (Sandbox Code Playgroud)