描述:在Android6.0手机上扫描不到蓝牙设备(如Nexus6),并会抛出一个异常:

 java.lang.SecurityException: Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to get scan results at android.os.Parcel.readException(Parcel.java:1599) at android.os.Parcel.readException(Parcel.java:1552) at android.bluetooth.IBluetoothGatt$Stub$Proxy.startScan(IBluetoothGatt.java:772) at android.bluetooth.le.BluetoothLeScanner$BleScanCallbackWrapper.onClientRegistered(BluetoothLeScanner.java:324) at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:56) at android.os.Binder.execTransact(Binder.java:453)


解决办法:
1,在清单文件加入权限:

 

2,在Activity中调用 requestPermissions() 方法来请求权限,系统会弹出需要请求权限的对话框
3,重写Activity的onRequestPermissionsResult()方法,接收权限是否请求的请求状态
示例代码如下:

   
private static final int PERMISSION_REQUEST_COARSE_LOCATION = 1;@Overrideprotected void onCreate(Bundle savedInstanceState) {    ......    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {        // Android M Permission check        if (this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {            requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);        }    }}@Overridepublic void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {    switch (requestCode) {        case PERMISSION_REQUEST_COARSE_LOCATION:            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {                // TODO request success            }        break;    }}

注:第2、3步骤在targetSdkVersion大于等于23(6.0)时必须添加,小于23时可以不用添加。所以另外一种处理办法是只加权限,然后把targetSdkVersion设置到23以下也能达到同样的效果,不过用户可以在权限管理中禁止了该权限,一样会搜不到设备。另外在Android 6.0上对应用权限进行授权是发生在应用运行时,而不是在安装时。同时用户也可以在应用程序设置中撤销对应用的权限授权。因此当要获取敏感权限(如相机、联系人)时最好先检查用户是否授予了改权限,如果没授予给出提示框提醒用户授予。
参考文章:http://developer.radiusnetworks.com/2015/09/29/is-your-beacon-app-ready-for-android-6.html
                                                                                               

更多相关文章

  1. android动态申请拍照获取照片权限
  2. Android判断是否有拍照权限
  3. Android Bluetooth蓝牙开发:Bluetooth蓝牙设备之间数据传输(4)
  4. Mac通过Android aapt解析apk包名、版本号、权限等信息

随机推荐

  1. Android入门教程(二)之------环境搭建
  2. Android SDK 2.2 离线安装
  3. 三层缓存机制-新知识点,Android常见的内存
  4. android开发(二):android结构
  5. Android基础知识学习-Instrumentation启
  6. Android--取得MD5指纹,取得MapKey
  7. 安卓巴士总结了近百个Android优秀开源项
  8. Android(安卓)布局优化
  9. Android设计模式系列-单例模式
  10. Android中扫描多媒体文件操作详解