这是一个困扰了我一天的问题,出现的情况是:之前在D10.3下做蓝牙应用的程序,在低版本的安卓下是可以正常使用的。但D10.3不能支持高版本的安卓系统,所以就更换了D11进行测试。
在使用D11对原D10.3的代码进行调整后,编译的APP可以正常在高低版本的安卓下安装使用,可出现一个问题是,安卓11下不能正确搜索到蓝牙设备(低版本的安卓下一切正常)。
最后发现是动态授权的问题,原因如下:
早期的安卓版本使用蓝牙时,不需要动态授权,后来需要动态授权时必须增加对“定位”的授权才能使用蓝牙,所以我在10.3的版本中使用的是ACCESS_COARSE_LOCATION,他能完成对定位权限的动态授权,这个授权在安卓11下也能成功,但却不能使用蓝牙。
要成功在安卓11下使用蓝牙,需要使用ACCESS_FINE_LOCATION进行授权。