最近维护一用到低功耗蓝牙的项目,看着targetSdkVersion版本比较低,想着项目比较简单就随手改成了29。结果一运行,蓝牙怎么都连不上了。
打开log看看啥情况,发现运行到这一行后没有触发任何的BluetoothGattCallback回调,连个状态码都不回。改回28就没问题,那么问题肯定出在api29的变更上。
BluetoothDevice.connectGatt(context,false,mGattCallback)
蓝牙代码是写在service中,查了一些关于api29的资料后,发现可能是缺少了必要权限。于是在manifest中添加了FOREGROUND_SERVICE
<!--service前台服务-->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
再次运行问题解决。其实中间还尝试了申请持续定位,换绑定方式,换connectGatt参数等。。。