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;
|
|||
|
}
|
|||
|
}
|