Android蓝牙开发经验总结(一)
来源:互联网 发布:ansys软件16.0 编辑:程序博客网 时间:2024/04/29 18:31
转载请注明博客地址`http://blog.csdn.net/q1406689423/article/details/50331889`,谢谢!
一直以为在CSDN上面写日志的都是一些大牛,而且也觉得写博客是一种很好的学习总结的方法,但是也是由于自己没什么时间,也是觉得自己水平不够,没有什么可写的。但是还是有一个成为大牛的心,所以还是决定开始写日志。同时也算给别说一下自己解决问题的方法,另外 以后再做这一块也是一个参考。
这份工作应该算是我第一份从事编程的工作,刚开始来的时候以为是做Android前端的UI,自己本身对UI开发还算比较感兴趣,所以就悻悻地来了。来了才知道我们这公司是一个游戏公司,我需要做的不是UI方面,而是做蓝牙通信这一块,以前也没做过这一块,但是觉得应该不会太难,应该会有系统给提供的一些接口,直接调用就可以了。但是确实是自己想简单了,算上处理bug用了大半个月的时间了,而且本来建议是采用蓝牙4.0的开发的,但是老板说为了让覆盖的人群更广就没选,不懂技术的老板伤不起啊!在这就是想把经验向大家分享一下,希望可以帮到有需要的人。
不说废话了,开始进入正题!
首先说一下蓝牙开发的准备阶段,主要就是在网上找类似的源码,本来以为蓝牙的源码应该也是不少的,但是找了一下却并不像自己想的那样,而且看着是符合自己需求的那种,点开发现却是要有积分之类的,其实挺坑的。找了很久之后,最后在一个论坛里发现一个人给的地址,是github上的一个源码,点开之后是直接可以聊天的那种,正好符合自己的需求。看了看github上的介绍,才发现原来是AndroidSDK上面原生的例子,感觉自己走了很多弯路啊!在此推荐给有意于蓝牙开发的同学一个提醒!
Github上的下载地址:https://github.com/ALLENnan/BluetoothChat
应该是这个网址,以前的没记下,写这篇日志的时候又在上面找了一下,应该是这个!
但是这里面的结构不是很清晰,而且是把三个连接状态下的线程都写在一个Service服务类,我自己感觉这样写是不怎么好的,一是结构不太清晰,二来感觉也不太容易维护,所以就进行了一些拆分。
首先来看一下主类BluetoothChat的作用:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(D) Log.e(TAG, "+++ ON CREATE +++"); // Set up the window layout setContentView(R.layout.main); // Get local Bluetooth adapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); // If the adapter is null, then Bluetooth is not supported if (mBluetoothAdapter == null) { Toast.makeText(this, "Bluetooth is not available", Toast.LENGTH_LONG).show(); finish(); return; } }
在Oncreate方法里面获得了一个BluetoothAdapter的对象,这个对象很重要,是实现蓝牙各种功能的基础,至于用法什么大家可以查看官方API进行了解,后面也会用到。需要注意的是Android api18以上获得BluetoothAdapter对象的方法不同了,大家可以查阅官方文档,这里不再赘述。
@Override public void onStart() { super.onStart(); if(D) Log.e(TAG, "++ ON START ++" ); // If BT is not on, request that it be enabled. // setupChat() will then be called during onActivityResult if (!mBluetoothAdapter.isEnabled()) { Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableIntent, REQUEST_ENABLE_BT); // Otherwise, setup the chat session } else { if (mChatService == null) setupChat(); } }
我们看到,在onstart方法里面进行了打开蓝牙的操作,其实直接调用mBluetoothAdapter的enable()方法也可以实现这样的效果!
@Override public synchronized void onResume() { super.onResume(); if(D) Log.e(TAG, "+ ON RESUME +"); // Performing this check in onResume() covers the case in which BT was // not enabled during onStart(), so we were paused to enable it... // onResume() will be called when ACTION_REQUEST_ENABLE activity returns. if (mChatService != null) { // Only if the state is STATE_NONE, do we know that we haven't started already if (mChatService.getState() == BluetoothChatService.STATE_NONE) { // Start the Bluetooth chat services mChatService.start(); } } }
在onResume方法里面我们就可以看到源码mChatService开始启动了,但是我改动之后的是将服务分为了两个线程,也是因为我们的项目的需要,就是拆分为一个用来主动连接的线程、一个用来接收的线程。
先写到这了,明天继续哈~
- Android蓝牙开发经验总结(一)
- Android蓝牙开发经验总结(二)
- Android蓝牙开发经验总结(三)
- Android手机蓝牙与单片机蓝牙串通信开发经验总结
- Android -- 蓝牙开发 <一>
- Android 蓝牙开发 【一】
- 蓝牙开发经验总结
- Android 蓝牙开发(一)蓝牙通信
- Android 蓝牙开发(一)蓝牙通信
- Android 蓝牙开发(一)蓝牙通信
- Android 蓝牙开发(一)蓝牙通信
- Android蓝牙开发(一)
- Android蓝牙开发(一)
- Android蓝牙开发(一)
- Android常见问题及开发经验总结(一)
- android开发性能优化经验总结一
- android 蓝牙4.0开发心得(一)蓝牙搜索
- Android 蓝牙通信开发(一)搜索蓝牙设备
- 数据结构之插入排序
- 关于Android 设置监听的的四种方式的理解
- 【数据压缩】LZW算法原理与源码解析
- 如何处理千万级以上的数据
- 1算法---插入排序
- Android蓝牙开发经验总结(一)
- 动态改变UITableView中的Cell高度
- 阿里云内网文件传输总结
- 黑马程序员_java基础_io流
- 提升含有动态高度UITableViewCell的UITableView的运行效率
- COCOS学习笔记--Cocos3.x引擎开发环境搭建
- vijos P1213机器分配(只求出了值 没有求出怎样分配)//(更新了 优化了代码并且求出了分配方案)
- 第14部视频CC2538 TinyOS的zigbee路由实验 blip+Roll路由
- Google支付(In-app Billing)接入