- 在Android6.0之前,,如果我们需要某一个权限会在AndroidManifest.xml添加标签,app尚未启动时就要求用户授予或者拒绝某些系统权限
- 在Android6.0及以后的版本,引入了运行时权限的设计规范。运行时权限会在APP运行时请求用户对权限进行授予或拒绝,严格把控app安全风险。
下面介绍Android运行时权限常规开发步骤
- 在AndroidManifest.xml文件中添加权限,如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.aaa">
<uses-permission android:name="android.permission.INTERNET" />
<application >
<activity android:name=".activity.Activity"></activity>
</application>
</manifest>
2.在Activity的onCreate方法中添加下面代码
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
String[] permissions={Manifest.permission.INTERNET,Manifest.permission.CAMERA}
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
for(int i=0;i<permissions.length;i++){
if(ContextCompat.checkSelfPermission(this,permissions[i] )
!= PackageManager.PERMISSION_GRANTED){
Log.e("Activity",permissions[i]+"未获得授权,请求权限...");
ActivityCompat.requestPermissions(this,permissions, 0);
}else{
Log.e("Activity","已获得授权,无需重复请求权限...");
//执行业务代码
}
}
}else{
Log.e("Activity","android版本低于23,无需请求运行时权限...");
//执行业务代码
}
}
3.在Activity中添加权限申请的回调函数onRequestPermissionsResult
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case 0:
if(grantResults != null && permissions != null){
for(int i=0;i<grantResults.length;i++){
if(grantResults[0]==PackageManager.PERMISSION_GRANTED){
Log.e("Activity",permissions[0]+"获得授权.");
//执行业务代码
}
if(grantResults[0]==PackageManager.PERMISSION_DENIED){
Log.e("Activity",permissions[0]+"未获得授权.");
//执行业务代码
}
}
}
break;
}
}
- 通过上述3个步骤便可完成Android运行时权限的申请。
- 当然,在开发的时候还可以根据需求使用第三方运行时权限申请开源框架,例如RxPermissions。本人并没有使用过,有需求的朋友可以自行了解。