文章目录
前言
几篇博客写下来,发现写博客还是挺花时间的,但是收获也不少,可以对以前做过的东西做一个比较全面的总结,加深印象,而不是在本地笔记上随便做点简单的记录敷衍了事,个人觉得在时间允许的情况还是要抽时间多做总结。
简介
在之前写的文章 基于蓝牙Ble的Android应用开发 中提到过,除了从Android4.3之后引入的Ble低功耗蓝牙之外,还有一种很早之前存在的比较常见的就是基于Spp协议的经典蓝牙,也就是我们经常说的传统蓝牙。两种蓝牙的主要区别在上一篇中也已经做了介绍,就不再赘述。
那么传统蓝牙有哪些应用场景呢?举几个比较常见的列子,比如说我们常见的蓝牙耳机、蓝牙音箱等,基本上都是基于传统蓝牙开发的。那么传统蓝牙开发和Ble开发主要有哪些异同点呢?让笔者在开发步骤中和Ble开发步骤对比,一 一简要说明。
开发步骤
第一、第二步和Ble开发的步骤一样,第三步注册的广播不一样
准备
准备需要用到的UUID:
public static final UUID SPP_UUID =UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
和Ble开发类似,先准备好需要用到的UUID,但是这个UUID有点特别,它不再是从硬件或者嵌入式工程师手中拿过来,而是协议栈中默认的UUID(需要用到这个UUID的系统方法有说明,后面会说)。另外需要注意的是,根据Google开发文档中的介绍,当前如果是连接的对象是另一台Android手机,则需要只用自定义的UUID。
第一步 配置清单文件
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!-- Android6.0及以上必须获取位置权限,否则无法扫描到周边的蓝牙设备 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
第二步 检查设备,获取BluetoothAdapter
/**
* 判断该设备是否支持Ble并获取BluetoothAdapter
*/
public Boolean ensureBLEExists() {
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
return false;
}
//获取BluetoothAdapter
BluetoothManager bm = (BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE);
if (bm!=null) mBluetoothAdapter = bm.getAdapter();
return true;
}
第三步 注册广播,开启蓝牙
/**
* 注册蓝牙监听广播
*/
public void registerReceiver(){
if (mBluetoothReceiver==null) mBluetoothReceiver=new BluetoothReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);//蓝牙开关状态
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);//蓝牙开始扫描
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);//蓝牙扫描结束
filter.addAction(BluetoothDevice.ACTION_FOUND);//发现设备
filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);//设备绑定状态变化
filter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);//连接上设备
filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);//连接断开
filter.addAction(BluetoothDevice.ACTION_PAIRING_REQUEST);//收到配对请求
mContext.registerReceiver(mBluetoothReceiver,filter);
}
private class BluetoothReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
// if (D) LogUtil.i("收到广播:"+action);
switch (action) {
case BluetoothAdapter.ACTION_STAT