上篇文章中,我们主要介绍了蓝牙模块,传统/经典蓝牙模块BT和低功耗蓝牙BLE及其相关的API,不熟悉的可以查看Android蓝牙开发(一)蓝牙模块及核心API 进行了解。
本篇主要记录用到的经典蓝牙开发流程及连接通讯。
1. 开启蓝牙
蓝牙连接前,给与相关系统权限:
<!-- 使用蓝牙的权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<!-- 扫描蓝牙设备或者操作蓝牙设置 -->
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!--模糊定位权限,仅作用于6.0+-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--精准定位权限,仅作用于6.0+-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
安卓6.0以上系统要动态请求及获取开启GPS内容:
/**
* 检查GPS是否打开
*/
private boolean checkGPSIsOpen() {
LocationManager locationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
if (locationManager == null)
return false;
return locationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER);
}
蓝牙核心对象获取,若获取对象为null则说明设备不支持蓝牙:
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
判断蓝牙是否开启,没有则开启:
//判断蓝牙是否开启
if (!mBluetoothAdapter.isEnabled()) {
//开启蓝牙,耗时,监听广播进行后续操作
mBluetoothAdapter.enable();
}
2.扫描蓝牙
蓝牙扫描:
mBluetoothAdapter.startDiscovery();
取消扫描:
mBluetoothAdapter.cancelDiscovery();
3.蓝牙状态监听
蓝牙监听广播,监听蓝牙开关,发现设备,扫描结束等状态,定义状态回调接口,进行对应操作,例如:监听到蓝牙开启后,进行设备扫描;发现设备后进行连接等。
/**
* 监听蓝牙广播-各种状态
*/
public class BluetoothReceiver extends BroadcastReceiver {
private static final String TAG = BluetoothReceiver.class.getSimpleName();
private final OnBluetoothReceiverListener mOnBluetoothReceiverListener;
public BluetoothReceiver(Context context,OnBluetoothReceiverListener onBluetoothReceiverListener) {
mOnBluetoothReceiverListener = onBluetoothReceiverListener;
context.registerReceiver(this,getBluetoothIntentFilter());
}
private IntentFilter getBluetoothIntentFilter() {
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);//蓝牙发现新设备(未配对的设备)
return filter;
}
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action == null) {
return;
}
Log.i(TAG, "===" + action);
BluetoothDevice dev = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (dev != null) {
<