Android M 以上版本需要显式获取授权,附授权代码:
在AndroidManifest.xml中添加权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- ACCESS_FINE_LOCATION:允许一个程序访问精确位置(如GPS) --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!-- ACCESS_COARSE_LOCATION:允许一个程序访问CellID或WiFi热点来获取大致的位置 -->
在activity中调用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);// 自定义常量,任意整型}}}/*** 请求权限的结果回调。每次调用 requestpermissions(string[],int)时都会调用此方法。* @param requestCode 传入的请求代码* @param permissions 传入permissions的要求* @param grantResults 相应权限的授予结果:PERMISSION_GRANTED 或 PERMISSION_DENIED*/@Overridepublic 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;}