Android6.0 蓝牙搜索不到设备原因,MIUI权限申请机制

本文介绍Android 6.0系统中新增的关于WiFi和蓝牙的权限管理细节,特别是针对目标SDK版本大于等于23的应用如何实现权限动态申请的过程,并探讨了在MIUI系统上的特殊行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为提供更高的数据保护 Android6.0版本上增加了关于Wifi和蓝牙的权限。

蓝牙搜索到设备需要用到定位服务,所以在开发中 targetSdkVersion 大于等于23(6.0) 需要在代码中进行权限获取

需要在配置文件中申请两个权限:

  1. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>  
  2. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>  


在代码中调用时先进行权限判断,如果没有权限就去申请权限:

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开发版。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值