最近,我发现手机的6.0权限在小米手机上存在问题,我在网上搜了很多的代码,都没有解决这个问题,所以这里记录一下自己的android 6.0权限的解决代码,如果有问题,大家可以在网上自己在找找代码去解决,不过,我发现大部分是一样的。
1.通过设置build.gradle文件来适配android 6.0.
这个很简单,只要把targetSdkVersion设置为23一下就可以,这是告诉手机这个app不支持android 6.0动态权限,所以手机会在安装时给予app所需权限。不过也存在问题,因为这样无法使用到android 6.0之后的新的特性。所以这个解决代码不是很好
compileSdkVersion 24
buildToolsVersion "24.0.2"
defaultConfig {
applicationId "com.whoislcj.rxpermissions"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
2.直接在代码申请动态权限。
从Android 6.0(API23)开始,当app运行时用户授予用户的权限,而不是在安装程序的时候。
系统权限分为2种,分别为normal和dangerous.
-
Normal permission:对于用户隐私没有危险的,在清单文件中申请就可以直接授权。
-
Dangerous permission:app需要访问用户的隐私信息等,即使在清单文件注册,也需要在运行是通过用户授权。
检查权限(check permission)
在android6.0及以上的sdk提供了一个检查权限的方法:ContextCompat.checkSelfPermission()。
int permission = ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.RECORD_AUDIO);
if (permission == PackageManager.PERMISSION_GRANTED) {
//表示已经授权
}
//PackageManager.PERMISSION_DENIED--->表示权限被否认了
如果在Activity中申请权限可以的调用:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { int permission = checkSelfPermission(Manifest.permission.RECORD_AUDIO);
}
请求权限
在Android 6.0及以上,如果检查没有权限,需要主动请求权限。在请求权限是会弹出一个对话框提示用户,是否授权。
请求权限的方法:requestPermissions()。在请求权限后会有一个回调方法onRequestPermissionsResult()。
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.RECORD_AUDIO}, 1);
//或者 在Activity的方法调用
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO},1);
}
/** * 参数1:requestCode-->是requestPermissions()方法传递过来的请求码。 * 参数2:permissions-->是requestPermissions()方法传递过来的需要申请权限 * 参数3:grantResults-->是申请权限后,系统返回的结果,PackageManager.PERMISSION_GRANTED表示授权成功,PackageManager.PERMISSION_DENIED表示授权失败。 * grantResults和permissions是一一对应的 */
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
这里主要是参考了网上别人的博客,觉得写得很好,所以直接来用,自己也不一定写得比别人明白。动态申请主要是使用ContextCompat.checkSelfPermission(Activity,权限);来检查权限,然后对应没有的权限,使用 ActivityCompat.requestPermissions(Activity, 权限数组, 请求码);进行动态申请。
这个解决代码基本实现了android的动态权限,不过我发现在小米 的note4会不停出现提示需要权限的问题。app每次启动都会提示需要录像,照相等权限,这个可能是小米手机的设置问题,我怎么也解决不了,所以大家用这个代码时必须注意小米 note4是否也存在一打开app就提示需要权限得 问题。
android 6.0权限问题就这样将完了。
就这么简单。