【车机蓝牙宝】 蓝牙链接部分的简单分享

2023-09-18  本文已影响0人  TheLazyCoder

背景:每次启动车子,手机都不会跟汽车蓝牙自动链接。身为开车必听歌的强迫症患者,每次上车手动链接都很耗时,最近受李跳跳的启发,感觉可以基于安卓的后台保活机制,来自动链接蓝牙以此解放双手。

基本工作原理:
基于安卓的无障碍模式保活、每十秒自动扫描周围蓝牙设备。当发现汽车蓝牙后,自动进行链接。
注:得益于现在蓝牙5.0的低功耗,所以长时间的蓝牙扫描,并不会明显影响手机续航能力

核心链接汽车蓝牙代码

public void connect(Context context, BluetoothDevice scanDevice) {
      if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
         return;
      }

      if (scanDevice.getBluetoothClass().getMajorDeviceClass() != BluetoothClass.Device.Major.AUDIO_VIDEO) {
         return;
      }
      mBluetoothAdapter.getProfileProxy(context, new BluetoothProfile.ServiceListener() {
         @Override
         public void onServiceConnected(int profile, BluetoothProfile proxy) {
            BluetoothHeadset bluetoothHeadset = (BluetoothHeadset) proxy;
            Class btHeadsetCls = BluetoothHeadset.class;
            try {
               Method connect = btHeadsetCls.getMethod("connect", BluetoothDevice.class);
               connect.setAccessible(true);
               connect.invoke(bluetoothHeadset, scanDevice);
            } catch (Exception e) {
               Log.e(TAG, e + "");
            }
         }

         @Override
         public void onServiceDisconnected(int profile) {

         }
      }, BluetoothProfile.HEADSET);
   }
上一篇下一篇

猜你喜欢

热点阅读