Android6.0以上动态权限申请

匿名 (未验证) 提交于 2019-12-02 22:59:29

在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("-------->", "授权请求被拒绝");             }         }     } }

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!