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开始启动了,但是我改动之后的是将服务分为了两个线程,也是因为我们的项目的需要,就是拆分为一个用来主动连接的线程、一个用来接收的线程。
先写到这了,明天继续哈~

1 0
原创粉丝点击