AndroidApp/PermissionUtils.java

86 lines
3.2 KiB
Java
Raw Normal View History

2025-07-11 18:32:05 +08:00
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;
}
}