扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
为提供更高的数据保护 Android6.0版本上增加了关于Wifi和蓝牙的权限。
为企业提供成都做网站、网站建设、网站优化、全网整合营销推广、竞价托管、品牌运营等营销获客服务。创新互联拥有网络营销运营团队,以丰富的互联网营销经验助力企业精准获客,真正落地解决中小企业营销获客难题,做到“让获客更简单”。自创立至今,成功用技术实力解决了企业“网站建设、网络品牌塑造、网络营销”三大难题,同时降低了营销成本,提高了有效客户转化率,获得了众多企业客户的高度认可!
蓝牙搜索到设备需要用到定位服务,所以在开发中 targetSdkVersion 大于等于23(6.0) 需要在代码中进行权限获取
需要在配置文件中申请两个权限:
在代码中调用时先进行权限判断,如果没有权限就去申请权限:
private void requestPermission() { if (Build.VERSION.SDK_INT >= 23) { int checkAccessFinePermission = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION); if (checkAccessFinePermission != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_PERMISSION_ACCESS_LOCATION); Log.d(TAG, "没有权限,请求权限"); return; } Log.d(TAG, "已有定位权限"); } //做下面该做的事 }
调用ActivityCompat.requestPermissions()之后会有一个回调
@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case Common.REQUEST_PERMISSION_ACCESS_LOCATION: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { Log.d(TAG, "开启权限permission granted!"); //做下面该做的事 } else { Log.d(TAG, "没有定位权限,请先开启!"); } } } super.onRequestPermissionsResult(requestCode, permissions, grantResults); }
网上有人说,当弹出权限确认框之后,用户点击确定或者拒绝时才会调用进行回调:onRequestPermissionsResult
但是在小米手机MIUI上并不是这样的。MIUI上是这样的:权限管理那里设置应用的定位权限为拒绝或者询问时checkAccessFinePermission != PackageManager.PERMISSION_GRANTED,说明没有定位权限 。如果设置为允许,checkAccessFinePermission ==PackageManager.PERMISSION_GRANTED,说明有定位权限。
当设置拒绝时去ActivityCompat.requestPermissions ,并没有弹出权限使用确认框,而是直接回调:没有权限
当设置询问时去ActivityCompat.requestPermissions ,并没有弹出权限使用确认框,而是直接回调:已有权限,然后在调用蓝牙代码的时候弹出确认框。当点击允许时权限管理那里变成了允许,当点击拒绝时,权限管理那里变成拒绝,但是下次再进行权限检查时返回 已有定位权限。权限管理那里明明是拒绝的啊,怎么就有定位权限了?感觉这是MIUI的一个bug,我的系统是:MIUI 8 6.11.3开发版。
以上这篇Android6.0 蓝牙搜索不到设备原因,MIUI权限申请机制方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持创新互联。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流