permission_manager.dart 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import 'package:permission_handler/permission_handler.dart';
  2. import 'package:device_info_plus/device_info_plus.dart';
  3. import 'dart:io';
  4. import 'log/logger.dart';
  5. class PermissionManager {
  6. /// 检查是否需要请求存储权限
  7. static Future<bool> _needsStoragePermission() async {
  8. if (!Platform.isAndroid) return false;
  9. try {
  10. final androidInfo = await DeviceInfoPlugin().androidInfo;
  11. // Android 10 是 API 29,所以 API 28 及以下是 Android 9 及以下
  12. return androidInfo.version.sdkInt <= 29;
  13. } catch (e) {
  14. log('PermissionManager', 'Error checking Android version: $e');
  15. return false;
  16. }
  17. }
  18. /// 请求存储权限
  19. static Future<bool> requestStoragePermission() async {
  20. // 检查是否需要请求权限
  21. if (!await _needsStoragePermission()) {
  22. return true;
  23. }
  24. try {
  25. var status = await Permission.storage.status;
  26. if (status.isGranted) {
  27. return true;
  28. }
  29. if (status.isPermanentlyDenied) {
  30. await openAppSettings();
  31. return false;
  32. }
  33. status = await Permission.storage.request();
  34. return status.isGranted;
  35. } catch (e) {
  36. log('PermissionManager', 'Error requesting storage permission: $e');
  37. return false;
  38. }
  39. }
  40. /// 检查存储权限
  41. static Future<bool> checkStoragePermission() async {
  42. // 检查是否需要请求权限
  43. if (!await _needsStoragePermission()) {
  44. return true;
  45. }
  46. try {
  47. final status = await Permission.storage.status;
  48. return status.isGranted;
  49. } catch (e) {
  50. log('PermissionManager', 'Error checking storage permission: $e');
  51. return false;
  52. }
  53. }
  54. }