Android(安卓)6.0蓝牙读写和扫描权限问题
16lz
2021-01-26
参考博文:https://blog.csdn.net/zrf1335348191/article/details/53487222
一、Android 6.0之前蓝牙读写和扫描的权限(AndroidManifest.xml):
二、Android 6.0之后:
为提供更高的数据保护,Android6.0版本上的蓝牙增加了 加一个动态权限 。除了在 AndroidManifest.xml 添加权限,还 需要在程序中动态申请。 蓝牙搜索设备需要用到定位服务,使用蓝牙搜索 除了需要动态申请蓝牙权限,还需要在这之前开启定位。1.判断位置信息是否打开
/** *判断是否开启定位 */ public static boolean isLocationOpen(final Context context){ LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); //gps定位 return manager.isProviderEnabled(LocationManager.GPS_PROVIDER); }
2.判断动态获取GPS权限
//开启位置服务,支持获取ble蓝牙扫描结果,安卓6.0以上需要动态开启权限 int BLUETOOTH_CODE = 1; if (Build.VERSION.SDK_INT >= 23) { System.out.println("安卓版本大于6.0"); if(!isLocationOpen(getApplicationContext())){ Intent enableLocate = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivityForResult(enableLocate, BLUETOOTH_CODE ); } } 3.开启GPS后,动态获取蓝牙权限
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if( resultCode == BLUETOOTH_CODE ){ if (isLocationOpen(getApplicationContext())) { //Android6.0需要动态申请权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { //请求权限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, FarmConstant.REQUEST_LOCATION_PERMISSION); if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_COARSE_LOCATION)) { //判断是否需要解释 Toast.makeText(this, "需要蓝牙权限", Toast.LENGTH_SHORT).show(); finish(); } } } else { //若未开启位置信息功能,则退出该应用 finish(); } } super.onActivityResult(requestCode, resultCode, data); }更多相关文章
- 【Android】listView动态处理item
- Android(安卓)UI之代码动态设置ImageView的宽度和高度
- Android(安卓)6.0 向用户申请权限,运行时权限
- Android(安卓)6.0权限获取方式-shouldShowRequestPermissionRati
- android之动态新建txt文件与读取
- Android中6.0及以上悬浮窗申请权限
- android 蓝牙模块相关的一些知识了解
- android去权限反编译,签名,zipalign优化
- selinux mode DAC and MAC