赞
踩
Android 6.0之后,蓝牙扫描回调需要获取模糊定位查询,Android 10之后更严格,需要获取精确定位。
这些年Google对安卓的控制可谓是越来越严谨了,安全性也是越来越高。
现在的问题是,当你的targetSDK>22的时候,扫描蓝牙就不不会有回调了,而且即使是在Manifest中添加了permission也依然无法获取回调,解决办法如下:
TargetSdk降级到22——降级法
以上办法比较愚蠢,会导致app的目标sdk过老旧,手机可能会提示兼容性问题,很不靠谱,建议仅仅是要解决问题的偷懒可以这个干,真要解决这个蓝牙回调权限问题请参照法二,如下:
第一步,修改Manifest.xml
-
-
- <!--关键代码-->
- <uses-permission android:name="android.permission.BLUETOOTH" />
- <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
-
-
第二步,手动开启权限的代码(注意android10开始,这个蓝牙permission通过manifest已经无法激活成功了,需要手动向用户提示,让用户打开哦。
- if (Build.VERSION.SDK_INT >= 23) {
- int checkCallPhonePermission = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION);
- if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){
- //判断是否需要 向用户解释,为什么要申请该权限
- if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_COARSE_LOCATION))
- // Toast.makeText(this,R.string.ble_need_location, Toast.LENGTH_LONG).show();
-
- ActivityCompat.requestPermissions(this ,new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},1);
- return;
- }else{
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。