笔记之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 }
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 }

浙公网安备 33010602011771号