AndroidApp/PermissionUtils.java

86 lines
3.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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