一、需求背景
客戶在使用我公司的Flutter插件時(shí),要求有一個(gè)藍(lán)牙與設(shè)備重連的功能,我用公司提供的Android SDK只能實(shí)現(xiàn)超出和進(jìn)入藍(lán)牙范圍進(jìn)行重連,但是無法在藍(lán)牙打開進(jìn)行重連,這不得不讓我使用Android手寫一個(gè)廣播監(jiān)聽。
二、實(shí)現(xiàn)步驟
1. 添加權(quán)限
2. 創(chuàng)建一個(gè)類繼承 BroadcastReceiver
3. 動(dòng)態(tài)注冊(cè)和注銷廣播
4. 監(jiān)聽藍(lán)牙狀態(tài)
三、代碼分享
1. 添加權(quán)限
在 AndroidManifest.xml 中添加藍(lán)牙權(quán)限
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
2. 創(chuàng)建一個(gè)類繼承 BroadcastReceiver
public class BLEStateReceiver extends BroadcastReceiver {
private static final String BLE_STATE_OFF = "android.bluetooth.BluetoothAdapter.STATE_OFF";
private static final String BLE_STATE_ON = "android.bluetooth.BluetoothAdapter.STATE_ON";
private static BLEStateReceiver receiver = new BLEStateReceiver();
/**
* 注冊(cè)
*
* @param context
*/
public static void register(Context context) {
IntentFilter filter = new IntentFilter();
filter.setPriority(Integer.MAX_VALUE);
// 監(jiān)視藍(lán)牙關(guān)閉和打開的狀態(tài)
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
filter.addAction(BLE_STATE_OFF);
filter.addAction(BLE_STATE_ON);
context.registerReceiver(receiver, filter);
}
/**
* 注銷
*
* @param context
*/
public static void unregister(Context context) {
context.unregisterReceiver(receiver);
}
@Override
public void onReceive(final Context context, Intent intent) {
// 檢測(cè)藍(lán)牙狀態(tài)的邏輯
}
}
3. 動(dòng)態(tài)注冊(cè)和注銷廣播
我這里是在 ActivityAware 的生命周期中注冊(cè)的,你可以根據(jù)實(shí)際情況進(jìn)行注冊(cè),只要在應(yīng)用運(yùn)行時(shí)注冊(cè)就行。
public class MoyoungBlePlugin implements ActivityAware {
private Activity activity;
@Override
public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) {
activity = binding.getActivity();
// 注冊(cè)廣播
BLEStateReceiver.register(activity);
}
@Override
public void onDetachedFromActivityForConfigChanges() {
}
@Override
public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) {
}
@Override
public void onDetachedFromActivity() {
// 注銷廣播
BLEStateReceiver.unregister(activity);
activity = null;
}
}
4. 監(jiān)聽藍(lán)牙狀態(tài)
我這里只監(jiān)聽了藍(lán)牙的兩種狀態(tài),如果想要監(jiān)聽多種狀態(tài)可以查看參考。
public class BLEStateReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
checkBLEState(context, intent);
}
/**
* 檢測(cè)藍(lán)牙狀態(tài)
*
* @param context
* @param intent
*/
private synchronized void checkBLEState(Context context, Intent intent) {
int BLEState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0);
switch (BLEState) {
case BluetoothAdapter.STATE_ON:
// 藍(lán)牙已經(jīng)打開
break;
case BluetoothAdapter.STATE_TURNING_OFF:
// 藍(lán)牙正在關(guān)閉
break;
}
}
}
四、參考文案
Android開發(fā)——藍(lán)牙狀態(tài)的監(jiān)聽 - 簡(jiǎn)書文章來源:http://www.zghlxwxcb.cn/news/detail-686237.html
Android監(jiān)聽藍(lán)牙與設(shè)備連接狀態(tài)、關(guān)閉和打開狀態(tài)_android 藍(lán)牙連接狀態(tài)監(jiān)聽_MasonYyp的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-686237.html
到了這里,關(guān)于Android 藍(lán)牙狀態(tài)的監(jiān)聽的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!