笔记之Android动态申请权限

 

1. 先在AndroidManifest.xml 中加入要申请的权限的静态申请

    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

2.检查权限是否授权,未授权就申请一下权限。(这里单独建了一个类,来放申请权限的方法)

 1 package com.example.permission;
 2 
 3 import android.Manifest;
 4 import android.app.Activity;
 5 import android.content.Context;
 6 import android.content.pm.PackageManager;
 7 import android.os.Build;
 8 import android.widget.Toast;
 9 
10 import androidx.core.app.ActivityCompat;
11 import androidx.core.content.ContextCompat;
12 
13 import java.util.ArrayList;
14 import java.util.List;
15 
16 public class permissionUtils {
17     public static final int PERMISSION_REQUEST_CODE = 1;
18     public static void verifyPermission(Activity activity){
19 
20         //当API版本大于等于23时,需动态申请权限
21         if (Build.VERSION.SDK_INT  >= Build.VERSION_CODES.M){
22 
23             List<String> permissionList = new ArrayList<>();
24             if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED){
25                 permissionList.add(Manifest.permission.CAMERA);
26             }
27             if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
28                 permissionList.add(Manifest.permission.READ_EXTERNAL_STORAGE);
29             }
30             if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
31                 permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
32             }
33             if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){
34                 permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
35             }
36 
37             if(!permissionList.isEmpty()){
38 
39                 ActivityCompat.requestPermissions(activity,permissionList.toArray(new String[0]),PERMISSION_REQUEST_CODE);
40             }
41             else{
42                 Toast.makeText(activity, "权限都已授权",Toast.LENGTH_SHORT).show();
43             }
44 
45         }
46     }
View Code

3.申请权限回调(针对动态授权的情况,给出一些响应)

 1 package com.example.permission;
 2 
 3 import androidx.annotation.NonNull;
 4 import androidx.appcompat.app.AppCompatActivity;
 5 
 6 import android.content.pm.PackageManager;
 7 import android.os.Bundle;
 8 import android.widget.Toast;
 9 
10 public class MainActivity extends AppCompatActivity {
11 
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.activity_main);
16         permissionUtils.verifyPermission(this);
17 
18     }
19 
20     @Override
21     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
22         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
23 
24         if(requestCode == permissionUtils.PERMISSION_REQUEST_CODE){
25                 if(grantResults.length>0){
26                     for(int grantResult : grantResults){
27                         if(grantResult != PackageManager.PERMISSION_GRANTED){
28                             Toast.makeText(this,"有权限被拒绝,请重新进入应用,打开被拒绝的权限",Toast.LENGTH_SHORT).show();
29                              return;
30                         }
31 
32                     }
33                 }
34 
35         }
36 
37     }
38 }
View Code

 

posted @ 2020-09-12 23:26  candidjuan  阅读(309)  评论(0)    收藏  举报