• Android 9.0 蓝牙功能之一:蓝牙设置


    Android 9.0 蓝牙功能之一:蓝牙设置

    本章节记录如何构建蓝牙设置。


    注意蓝牙应用必须是 System App。

    主要流程

    LocalBluetoothManager 是操作蓝牙的主要入口。

    1.通过 LocalBluetoothManager,可以获取到LocalBluetoothAdapter;CachedBluetoothDeviceManager;BluetoothEventManager、LocalBluetoothProfileManager。

    2.通过 BluetoothEventManager.registerCallback 注册回调,就可以
    监听蓝牙状态变化、设备搜索、连接状态等信息。

    3.注册BluetoothCallback.onBluetoothStateChanged 回调即可监听蓝牙开关状态。
    可以通过LocalBluetoothAdapter.enable()打开蓝牙。

    4.注册BluetoothCallback.onScanningStateChanged来监听蓝牙搜索状态,
    当调用LoalBluetoothAdapter.startScanning 开始搜索后搜索到的设备通过
    BluetoothCallback.onDeviceAdded 回调给 App。

    5.最后通过 CachedBluetoothDevice.connect发起连接搜索到的指定设备。

    相关代码

    添加蓝牙相关权限:
    AndroidManifest.xml :

    
    
    
    • 1
    • 2

    初始化蓝牙相关接口

    
    //获取蓝牙相关对象
    mLocalBluetoothManager = LocalBluetoothManager.getInstance(context,mOnInitCallback);
    mCachedDeviceManager = mLocalBluetoothManager.getCachedDeviceManager();
    mBluetoothEventManager = mLocalBluetoothManager.getEventManager();
    mBluetoothProfileManager = mLocalBluetoothManager.getProfileManager();
    
    //注册回调
    mBluetoothEventManager.registerCallback(mBluetoothCallback);
    mBluetoothProfileManager.addServiceListener(mServiceListener);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    实现 ServiceListener,以监听 Profile 相关接口

    
    LocalBluetoothProfileManager.ServiceListener mServiceListener = new LocalBluetoothProfileManager.ServiceListener() {
     void onServiceConnected() {
    
     //蓝牙已经打开,可以调用各 Profile 的接口了,比如可以获取连接状态,连接蓝牙设备等。
    
     }
     void onServiceDisconnected() {
    
     //蓝牙已经关闭
    
     }
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    监听蓝牙各状态变化,至于设备的连接或者断开主要通过CachedBluetoothDevice对象操作。

    
    BluetoothCallback mBluetoothCallback = new BluetoothCallback() {
    
     void onBluetoothStateChanged(int bluetoothState) {
     //蓝牙开关状态变化
     }
     void onScanningStateChanged(boolean started) {
     //蓝牙搜索状态变化
     }
     void onDeviceAdded(CachedBluetoothDevice cachedDevice) {
     //搜索到新设备
     }
     void onDeviceDeleted(CachedBluetoothDevice cachedDevice) {
     //配对的设备被移除
     }
     void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState) {
     //设备配对状态变化
     }
     void onConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state) {
     //设备连接状态变化
     }
     void onActiveDeviceChanged(CachedBluetoothDevice activeDevice, int bluetoothProfile) {
     //活动设备变化
     }
     void onProfileConnectionStateChanged(CachedBluetoothDevice cachedDevice) {
     //Profile协议连接状态变化(a2db;hdcp)
     }
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    UI 自动化测试实战(二)| 测试数据的数据驱动
    Ubuntu下编译运行MicroPython Unix版本
    LeetCode_贪心算法_简单_409.最长回文串
    Windows搭建minio存储
    实战回忆录:从Webshell开始突破边界
    idea连接kerberos认证的hive
    【笔试强训选择题】Day47.习题(错题)解析
    学习使用 Docker
    DSA之排序(1):什么是排序
    【技术类-01】doc转PDF程序卡死的解决方案,
  • 原文地址:https://blog.csdn.net/qq_33544860/article/details/127853642