在Android6.0之前只需在AndroidManifest.xml文件写明权限即可。但是在Android6.0之后也就是SDK>=23的时候,一些隐私权限需要动态申请,而且在用户同意授权之后App才能拥有该权限。
如下9组权限需要动态申请。而且一组权限只要一个授权授权同意,全组都可用。
D_SMS
动态权限总共有三个方法:
ContextCompat.checkSelfPermission() 检查权限是否已经授权
ActivityCompat.requestPermissions()动态申请权限,并弹出对话框。
onRequestPermissionsResult()在activity里面重写该方法该方法是权限申请之后的回调方法。
当然。动态权限申请也要在AndroidManifest.xml里面写明。附上代码
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //写在Activity里面 applypermission(); } public void applypermission(){ if(Build.VERSION.SDK_INT>=23){ //检查是否已经给了权限 int checkpermission= ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION); if(checkpermission!=PackageManager.PERMISSION_GRANTED){//没有给权限 Log.e("permission","动态申请"); //参数分别是当前活动,权限字符串数组,requestcode ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1); } } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); //grantResults数组与权限字符串数组对应,里面存放权限申请结果 if (grantResults[i] == PackageManager.PERMISSION_GRANTED) { Log.e("-------->", "授权请求被允许"); } else { Log.e("-------->", "授权请求被拒绝"); } } } public class MainActivity extends AppCompatActivity { String[] allpermissions=new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CALL_PHONE}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); applypermission(); } public void applypermission(){ if(Build.VERSION.SDK_INT>=23){ boolean needapply=false; for(int i=0;i<allpermissions.length;i++){//判断数组中权限是否已经授权 int chechpermission= ContextCompat.checkSelfPermission(getApplicationContext(),allpermissions[i]); if(chechpermission!=PackageManager.PERMISSION_GRANTED){ needapply=true; } } if(needapply){ ActivityCompat.requestPermissions(MainActivity.this,allpermissions,1); } } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); for(int i=0;i<grantResults.length;i++){ if(grantResults[i]==PackageManager.PERMISSION_GRANTED){ Log.e("-------->", "授权请求被允许"); } else { Log.e("-------->", "授权请求被拒绝"); } } } } 文章来源: Android6.0以上动态权限申请