一、序言
在以往的Android开发过程中,遇到了很多需要申请手机相关权限的问题。申请方式总的来说,分别静态申请和动态申请两种,这里对Android权限的相关内容做一个总结。
二、静态申请权限
2.1 权限总结
//1 查看网络连接状态
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
//2 手机照片访问 照片权限
<uses-permission android:name="android.permission.CAMERA"/>
//3 定位权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
//4 完全网络访问权限(即允许手机访问网络)
<uses-permission android:name="android.permission.INTERNET"/>
//5 接收开机自启动广播的权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
//6 录音权限
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
//7 获取手机的存储卡权限(Android10+ 不推荐使用该权限)
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
三、动态权限申请
// 动态申请权限(以“相机权限”为例)
String[] permissions = {
Manifest.permission.CAMERA};
final int REQUEST_CODE = 10001;
// 版本判断。当手机系统大于 23 时,才有必要去判断权限是否获取
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 检查该权限是否已经获取
for (String permission : permissions) {
// GRANTED---授权 DINIED---拒绝
if (ContextCompat.checkSelfPermission(getApplicationContext(), permission) == PackageManager.PERMISSION_DENIED) {
ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE);
}
}
}
boolean permission_readStorage = (ContextCompat.checkSelfPermission(getApplicationContext(),
Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
boolean permission_camera = (ContextCompat.checkSelfPermission(getApplicationContext(),
Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED);
Log.d("ImgActivity:", "getImageFromDesc: \n");
Log.d("ImgActivity: ", "readPermission: " + permission_readStorage + "\n");
Log.d("ImgActivity: ", "cameraPermission: " + permission_camera + "\n");