Android ble 蓝牙4.0 总结一
本文介绍Android ble 蓝牙4.0,也就是说API level >= 18,且支持蓝牙4.0的手机才可以使用,如果手机系统版本API level < 18,也是用不了蓝牙4.0的哦。
首先发一下官方的demo,有兴趣的可以过去看看:http://developer.android.com/guide/topics/connectivity/bluetooth-le.html。android系统4.3以上,手机支持蓝牙4.0,具有搜索,配对,连接,发现服务及特征值,断开连接等功能,下载地址:http://download.youkuaiyun.com/detail/lqw770737185/8116019。
一、了解api及概念
1.1 BluetoothGatt
继承BluetoothProfile,通过BluetoothGatt可以连接设备(connect),发现服务(discoverServices),并把相应地属性返回到BluetoothGattCallback
1.2 BluetoothGattCharacteristic
相当于一个数据类型,它包括一个value和0~n个value的描述(BluetoothGattDescriptor)
1.3 BluetoothGattDescriptor
描述符,对Characteristic的描述,包括范围、计量单位等
1.4 BluetoothGattService
服务,Characteristic的集合。
1.5 BluetoothProfile
一个通用的规范,按照这个规范来收发数据。
1.6 BluetoothManager
通过BluetoothManager来获取BluetoothAdapter
1
|
BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
|
1.7 BluetoothAdapter
一个Android系统只有一个BluetoothAdapter ,通过BluetoothManager 获取
1
|
BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter();
|
1.8 BluetoothGattCallback
已经连接上设备,对设备的某些操作后返回的结果。这里必须提醒下,已经连接上设备后的才可以返回,没有返回的认真看看有没有连接上设备。
1
2
3
4
5
6
7
|
private
BluetoothGattCallback GattCallback =
new
BluetoothGattCallback() {
// 这里有9个要实现的方法,看情况要实现那些,用到那些就实现那些
public
void
onConnectionStateChange(BluetoothGatt gatt,
int
status,
int
newState){};
public
void
onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic,
int
status){};
};
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
BluetoothGatt gatt = device.connectGatt(
this
,
false
, mGattCallback);
|
1.8.1:notification对应
onCharacteristicChanged;
1
|
gatt.setCharacteristicNotification(characteristic,
true
);
|
1.8.2:
readCharacteristic对应
onCharacteristicRead;
1
|
gatt.readCharacteristic(characteristic);
|
1.8.3: writeCharacteristic对应
onCharacteristicWrite;
1
|
gatt.wirteCharacteristic(mCurrentcharacteristic);
|
1.8.4:连接蓝牙或者断开蓝牙 对应 onConnectionStateChange;
1.8.5: readDescriptor对应
onDescriptorRead;
1.8.6:writeDescriptor对应onDescriptorWrite;
1
|
gatt.writeDescriptor(descriptor);
|
1.8.7:readRemoteRssi对应onReadRemoteRssi;
1
|
gatt.readRemoteRssi()
|
1.8.8:executeReliableWrite对应onReliableWriteCompleted;
1.8.9:discoverServices对应onServicesDiscovered。
1
|
gatt.discoverServices()
|
1.9 BluetoothDevice
扫描后发现可连接的设备,获取已经连接的设备
二、开启蓝牙权限
1
2
3
|
<uses-permission android:name=
"android.permission.BLUETOOTH"
/>
<uses-permission android:name=
"android.permission.BLUETOOTH_ADMIN"
/>
<uses-feature android:name=
"android.hardware.bluetooth_le"
android:required=
"true"
/>
|
如果 android.hardware.bluetooth_le设置为false,可以安装在不支持的设备上使用,判断是否支持蓝牙4.0用以下代码就可以了
1
2
3
4
|
if
(!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
Toast.makeText(
this
,
"设备不支持蓝牙4.0"
, Toast.LENGTH_SHORT).show();
finish();
}
|
三、对蓝牙的启动关闭操作
1、利用系统默认开启蓝牙对话框
1
2
3
4
|
if
(mBluetoothAdapter ==
null
|| !mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent =
new
Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
|
2、后台打开蓝牙,不做任何提示,这个也可以用来自定义打开蓝牙对话框啦
1
|
mBluetoothAdapter.enable();
|
3、后台关闭蓝牙
1
|
mBluetoothAdapter.disable();
|
四、扫描设备,连接设备,获取设备信息 ,断开连接设备,自行查看官方demo,还是看demo比较清晰啊