失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > android 蓝牙相关广播 Android通过广播接收器BroadcastReceiver监听蓝牙连接变化

android 蓝牙相关广播 Android通过广播接收器BroadcastReceiver监听蓝牙连接变化

时间:2021-03-22 19:14:26

相关推荐

android 蓝牙相关广播 Android通过广播接收器BroadcastReceiver监听蓝牙连接变化

上一篇介绍了通过广播对蓝牙的打开关闭等变化的监听,这一篇将对蓝牙连接状态的变化进行封装。

首先是广播接收器BlueToothConnectReceiver 类

import android.bluetooth.BluetoothDevice;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.util.Log;

public class BlueToothConnectReceiver extends BroadcastReceiver {

private OnBleConnectListener onBleConnectListener;

@Override

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

switch (action) {

case BluetoothDevice.ACTION_ACL_CONNECTED:

if (onBleConnectListener != null) {

onBleConnectListener.onConnect(device);

}

Log.d("BlueToothConnect", "BroadcastReceiver蓝牙已连接:" + device.getName());

break;

case BluetoothDevice.ACTION_ACL_DISCONNECTED:

//当直接关闭蓝牙时此处不会被触发,只有当蓝牙未关闭并且断开蓝牙时才会触发

if (onBleConnectListener != null) {

onBleConnectListener.onDisConnect(device);

}

Log.d("BlueToothConnect", "BroadcastReceiver蓝牙已断开:" + device.getName());

break;

}

}

public interface OnBleConnectListener {

void onConnect(BluetoothDevice device);

void onDisConnect(BluetoothDevice device);

}

public void setOnBleConnectListener(OnBleConnectListener onBleConnectListener) {

this.onBleConnectListener = onBleConnectListener;

}

}

接着是封装注册和取消注册的BlueToothUtils类,依旧使用单例模式

import android.app.Activity;

import android.bluetooth.BluetoothAdapter;

import android.bluetooth.BluetoothDevice;

import android.content.IntentFilter;

/**

* @author wang songbo

*/

public class BlueToothUtils {

private static BlueToothUtils INSTANCE;

private BlueToothStateReceiver blueToothStateReceiver;

private BlueToothConnectReceiver blueToothConnectReceiver;

public static synchronized BlueToothUtils getInstance() {

if (INSTANCE == null) {

INSTANCE = new BlueToothUtils();

}

return INSTANCE;

}

//注册广播接收器,用于监听蓝牙状态变化

public void registerBlueToothStateReceiver(Activity activity) {

blueToothStateReceiver = new BlueToothStateReceiver();

IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);

activity.registerReceiver(blueToothStateReceiver, filter);

blueToothStateReceiver.setOnBlueToothStateListener(new BlueToothStateReceiver.OnBlueToothStateListener() {

@Override

public void onStateOff() {

//do something

}

@Override

public void onStateOn() {

//do something

}

@Override

public void onStateTurningOn() {

//do something

}

@Override

public void onStateTurningOff() {

//do something

}

});

}

public void unregisterBlueToothStateReceiver(Activity activity) {

activity.unregisterReceiver(blueToothStateReceiver);

}

//注册广播接收器,用于监听蓝牙连接情况的变化

public void registerBlueToothConnectReceiver(Activity activity) {

blueToothConnectReceiver = new BlueToothConnectReceiver();

IntentFilter filter_connect = new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED);

activity.registerReceiver(blueToothConnectReceiver, filter_connect);

IntentFilter filter_disconnect = new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED);

activity.registerReceiver(blueToothConnectReceiver, filter_disconnect);

blueToothConnectReceiver.setOnBleConnectListener(new BlueToothConnectReceiver.OnBleConnectListener() {

@Override

public void onConnect(BluetoothDevice device) {

}

@Override

public void onDisConnect(BluetoothDevice device) {

}

});

}

public void unregisterBlueToothConnectReceiver(Activity activity) {

activity.unregisterReceiver(blueToothConnectReceiver);

}

}

在Activity中注册与取消

BlueToothUtils.getInstance().registerBlueToothConnectReceiver(this);//注册广播

BlueToothUtils.getInstance().unregisterBlueToothConnectReceiver(this);//取消注册广播

AndroidManifest.xml中添加权限

蓝牙打开关闭状态变化传送门:

/u010161303/article/details/88824846

如果觉得《android 蓝牙相关广播 Android通过广播接收器BroadcastReceiver监听蓝牙连接变化》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。