86 lines
3.2 KiB
Java
86 lines
3.2 KiB
Java
package com.example.myapplication.Tool;
|
||
|
||
import android.Manifest;
|
||
import android.app.Activity;
|
||
import android.content.pm.PackageManager;
|
||
import android.os.Build;
|
||
|
||
import androidx.core.app.ActivityCompat;
|
||
import androidx.core.content.ContextCompat;
|
||
|
||
public class PermissionUtils {
|
||
// 请求码
|
||
public static final int REQUEST_STORAGE_PERMISSION = 101;
|
||
public static final int REQUEST_MEDIA_PERMISSION = 102; // Android 13+ 媒体权限
|
||
|
||
// 检查并请求所有必要权限
|
||
public static boolean checkAndRequestPermissions(Activity activity) {
|
||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
|
||
// Android 14+ 需要检查媒体权限(如果要访问媒体文件)
|
||
return checkMediaPermissions(activity);
|
||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||
// Android 10-13 使用 SAF 或 MediaStore,不需要存储权限
|
||
return true;
|
||
} else {
|
||
// Android 9 及以下需要传统存储权限
|
||
return checkLegacyStoragePermission(activity);
|
||
}
|
||
}
|
||
|
||
// Android 14+ 媒体权限检查
|
||
private static boolean checkMediaPermissions(Activity activity) {
|
||
String[] permissions;
|
||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||
permissions = new String[]{
|
||
Manifest.permission.READ_MEDIA_IMAGES,
|
||
Manifest.permission.READ_MEDIA_VIDEO,
|
||
Manifest.permission.READ_MEDIA_AUDIO
|
||
};
|
||
} else {
|
||
permissions = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE};
|
||
}
|
||
|
||
boolean allGranted = true;
|
||
for (String perm : permissions) {
|
||
if (ContextCompat.checkSelfPermission(activity, perm) != PackageManager.PERMISSION_GRANTED) {
|
||
allGranted = false;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (!allGranted) {
|
||
ActivityCompat.requestPermissions(activity, permissions, REQUEST_MEDIA_PERMISSION);
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
// Android 9 及以下传统存储权限
|
||
private static boolean checkLegacyStoragePermission(Activity activity) {
|
||
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||
!= PackageManager.PERMISSION_GRANTED) {
|
||
ActivityCompat.requestPermissions(activity,
|
||
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||
REQUEST_STORAGE_PERMISSION);
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
// 处理权限请求结果
|
||
public static boolean handlePermissionResult(int requestCode,
|
||
String[] permissions, int[] grantResults) {
|
||
if (grantResults.length == 0) return false;
|
||
|
||
if (requestCode == REQUEST_STORAGE_PERMISSION ||
|
||
requestCode == REQUEST_MEDIA_PERMISSION) {
|
||
for (int result : grantResults) {
|
||
if (result != PackageManager.PERMISSION_GRANTED) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
} |