基于蓝牙和baidu地图的一个轨迹显示APP
来源:互联网 发布:什么是数据落差 编辑:程序博客网 时间:2024/06/03 18:17
最近帮别人做了一个简单的APP,主要的功能就是显示一个物体的路径,这个物体上自带了GPS和蓝牙,会不断将自己的位置信息通过蓝牙发送到我们的手机端,然后在手机端进行一个显示。
我们的界面上有两个按钮,一个是用来开关蓝牙的,一个用来收索周围的蓝牙设备。
but_On_Off.setOnClickListener(new View.OnClickListener() {//打开蓝牙的按钮 @Override public void onClick(View v) { if(!mBluetoothAdapter.isEnabled()){ mBluetoothAdapter.enable(); Toast.makeText(MainActivity.this, "蓝牙已开启", Toast.LENGTH_SHORT).show(); but_On_Off.setText("关闭蓝牙"); }else{ mBluetoothAdapter.disable(); Toast.makeText(MainActivity.this, "蓝牙已关闭", Toast.LENGTH_SHORT).show(); but_On_Off.setText("开启蓝牙"); } } }); but_search.setOnClickListener(new View.OnClickListener() {//搜索设备 @Override public void onClick(View v) { searchDevice(); } });
和蓝牙设备建立连接之后,就开始不断读取数据,然后把数据保存在Bundle里边,通过MainActivity中的Handler来刷新界面。
下面是这个读取数据线程的关键代码:
public void run() { Log.i(TAG, "BEGIN mConnectedThread"); byte[] buffer = new byte[9]; int bytes; // Keep listening to the InputStream while connected while (true) { try { // Read from the InputStream if((bytes = mmInStream.read(buffer)) > 1) { byte[] buf_data = new byte[bytes]; for (int i = 0; i<bytes; i++) { buf_data[i] = buffer[i]; } /*bytes = mmInStream.read(buffer);*/ // Send the obtained bytes to the UI Activity /*mHandler.obtainMessage(MainActivity.MESSAGE_READ, bytes, -1, buffer) .sendToTarget();*/ Message msg = mHandler.obtainMessage(); msg.what = MainActivity.MESSAGE_READ; Bundle bundle = new Bundle(); /*bundle.putString("info",buffer.toString());*/ bundle.putByteArray("info", buf_data); msg.setData(bundle); mHandler.sendMessage(msg); } } catch (IOException e) { Log.e(TAG, "disconnected", e); connectionLost(); break; } } }
数据的格式直接是16进制的,这里要注意一个大小端的问题,注意发送和接收的顺序,如果数据反过来了,那么就是大小端的原因,还有就是在调试的时候我发现一个问题就是数据第一个会丢失掉,所以我让下位机端多发送了一个无用的数据,然后读取后面8位。至于这是什么原因,我现在还不是太清楚。。。。如果有人知道麻烦告知我一下~~
下面是主程序中的用来接收数据的关键代码:
case MESSAGE_READ: Bundle bundle=msg.getData(); byte[] array=bundle.getByteArray("info"); /* System.out.println(bytesToFloat(array,0)); System.out.println(bytesToFloat(array,4));*/ /*for (int i=0;i<array.length;i++){ System.out.println(array[i]); } System.out.println("+++++++++++++++++++++");*/ if (array.length==8) { float longitude=bytesToFloat(array,0); float latitude=bytesToFloat(array,4); if((latitude>4)&&(longitude>73)){ addOverlays(latitude,longitude); } } break;
至于baidu地图的使用,这里就不多讲了,主要就是接收到一个数据就添加一个覆盖物。很简单~
最后就贴一下下位机的代码,下位机是用stm32做的,占时只是发送一些假数据,如果真实使用的时候有什么问题再修改。
下面贴出关键代码:
union{ u8 temp[4*2+1]; float num[2];}senddata;int main(void){ int i;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2delay_init(168);//延时初始化 uart_init(9600);//串口初始化波特率为115200senddata.num[0]=31.602684f;senddata.num[1]=120.296532f;senddata.temp[8]=0xee;while(1){for(i=8;i>=0;i--){USART_SendData(USART1,senddata.temp[i] ); //*((u8*)(&Y[0][0])+i)while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);}delay_ms(10000);}}最后是一个效果:
总共调试了一天多的时间,调试的时候经历了各种问题,但是最后自己一点点把这些问题解决感觉还是不错的~
最后贴出整个项目的链接:
http://download.csdn.net/detail/yalishadaa/9663189
0 0
- 基于蓝牙和baidu地图的一个轨迹显示APP
- 百度地图显示轨迹
- baidu map,百度地图,轨迹播放
- 基于Google提供play-services:9.8.0的Google 地图开发,适用于Activity、Fragment,并实现添加Marker和根据经纬度显示运动轨迹
- 运动类App 轨迹 多个大头针 蓝牙连接(高德地图)
- 百度地图--实时显示轨迹
- 百度地图显示历史轨迹时经纬度的处理方法
- 高德地图---设置固定显示完整轨迹的摄像头
- baiDu地图显示覆盖物
- Baidu Map SDK 地图显示不出来的原因
- 基于高德地图API实现车辆轨迹回放并显示实时坐标
- iOS之地图的使用和实时描绘运动轨迹
- 手机端GSP地图的定位 并且在网页上显示地图的轨迹
- 基于环信和百度地图的一个项目总结
- 关于android baidu map不显示地图,只显示网格的问题
- android之基于高德地图的移动轨迹的可视化
- Android高德地图如何让所有的轨迹在屏幕范围内都显示出来.
- 基于Kiwi数据格式的地图显示研究
- chroma subsampling
- [SDOI2009][BZOJ1878][前缀和][树状数组]HH的项链
- Python之父谈Python的未来
- iOS app上线简单方法
- caffe-windows版下编译pycaffe
- 基于蓝牙和baidu地图的一个轨迹显示APP
- HttpServletRequest总结
- 关于view.getWidth等获取值的单位是什么?px/dp/sp
- 算法-第四版-练习1.3.25解答
- Linux命令-crontab
- cocos2d - JS project.json 属性
- CIPAddressCtr控件中IP地址的转换问题
- webpack多页应用架构专题系列
- 牛客网刷题之 两个链表的第一个公共结点