android 6.0 以后,搜索蓝牙设备,打开蓝牙,除了需要蓝牙权限以外,
<!--蓝牙权限-->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> 在android的6.0之前,需要在maniffests文件中 AndroidManifest.xml 添加上面的蓝牙权限就可以了
可以看到,但是在android 6.0 以后还需要下面的这两个权限.其实就是位置权限.
<!--6.0及之后需要动态申请-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
而且这个位置权限需要动态的去申请,下面就是动态申请android的位置权限的代码
比如我这里,在activity的onCreate方法中调用了,获取这个位置权限的方法.
1.下面是getPermission的方法.
/**
* 解决:无法发现蓝牙设备的问题
*
* 对于发现新设备这个功能, 还需另外两个权限(Android M 以上版本需要显式获取授权,附授权代码):
*/
private final int ACCESS_LOCATION=1;
@SuppressLint("WrongConstant")
private void getPermission() {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
int permissionCheck = 0;
permissionCheck = this.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION);
permissionCheck += this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
//未获得权限
this.requestPermissions( // 请求授权
new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION},
ACCESS_LOCATION);// 自定义常量,任意整型
}
}
}
2.还有依赖的两个方法
/**
* 请求权限的结果回调。每次调用 requestpermissions(string[],int)时都会调用此方法。
* @param requestCode 传入的请求代码
* @param permissions 传入permissions的要求
* @param grantResults 相应权限的授予结果:PERMISSION_GRANTED 或 PERMISSION_DENIED
*/
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case ACCESS_LOCATION:
if (hasAllPermissionGranted(grantResults)) {
Log.i("TAG", "onRequestPermissionsResult: 用户允许权限");
} else {
Log.i("TAG", "onRequestPermissionsResult: 拒绝搜索设备权限");
}
break;
}
}
private boolean hasAllPermissionGranted(int[] grantResults) {
for (int grantResult : grantResults) {
if (grantResult == PackageManager.PERMISSION_DENIED) {
return false;
}
}
return true;
}
3.说明,将上面的代码,复制就可以使用了,就是程序启动的时候,调用一下,如果该程序没有获得位置权限的话,会自动弹出一个提示,是否允许,程序在使用期间,使用位置信息,点击允许,这个时候,再去,
搜索蓝牙设备就可以搜索到蓝牙了.