Android6.0的蓝牙权限问题

2017-04-26 11:41

#Android6.0的蓝牙权限问题
在Adroid6.0以前,申请权限只需在manifest文件下申请相应的权限即可,但是Android6.0后,像一些危险权限,比如操作SD卡的写入,相机,录音等,是需要在java代码中去申请的。
本篇文章,主要是讲Android6.0系统中扫描蓝牙的权限的申请。
首先,我们需要检查当前手机的系统版本,检查系统版本的原因,显而易见,如果是系统6.0及以上的,需要采用新的授权方法。

if(Build.VERSION.SDK_INT>=23){
    //判断是否有权限
    if (ContextCompat.checkSelfPermission(DeviceListActivity.this,
Manifest.permission.ACCESS_COARSE_LOCATION)!=PackageManager.PERMISSION_GRANTED) {
    //请求权限
 ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
REQUEST_ACCESS_COARSE_LOCATION);
//向用户解释,为什么要申请该权限
if(ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.READ_CONTACTS)) {
Toast.makeText(DeviceListActivity.this,"shouldShowRequestPermissionRationale", Toast.LENGTH_SHORT).show();
      }
    }
}

回调方式如下;

@Override
public void onRequestPermissionsResult(int requestCode,String[] permissions, int[] grantResults) {
 // TODO Auto-generated method stub
   if (requestCode == REQUEST_ACCESS_COARSE_LOCATION) {
    if (permissions[0] .equals(Manifest.permission.ACCESS_COARSE_LOCATION)
            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 用户同意使用该权限
        } else {
          // 用户不同意,向用户展示该权限作用
        if (!ActivityCompat.shouldShowRequestPermissionRationale(this,
        Manifest.permission.ACCESS_COARSE_LOCATION)) {
        //showTipDialog("用来扫描附件蓝牙设备的权限,请手动开启!");
                return;
              }
            }
          } 
        }

还有当前activity需要实现OnRequestPermissionsResultCallback接口;
当然也需要在manifest中加上相应的权限申明:

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

Android6.0其他的一些危险权限申请和上面的方式类似。
更多安卓相关信息,请扫码关注微信公众号:lifeAndroid
这里写图片描述