Android 13集成permission_handler访问存储失败问题求助
问题排查与解决方案
核心问题
Android 13(API 33+)强制要求应用必须申请POST_NOTIFICATIONS权限才能使用通知功能,你的代码未处理该权限请求,导致flutter_local_notifications初始化失败,这是当前报错的直接原因。
修复步骤
1. 在AndroidManifest.xml中添加通知权限
在现有权限列表中新增以下权限声明:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
2. 初始化通知前主动请求权限
使用permission_handler包在初始化通知插件前请求通知权限,确保用户授权后再执行初始化操作。修改main函数如下:
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('ic_notification'); const InitializationSettings initializationSettings = InitializationSettings( android: initializationSettingsAndroid, ); Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); // 请求通知权限 final notificationStatus = await Permission.notification.request(); if (notificationStatus.isGranted) { // 权限通过后初始化通知插件 await flutterLocalNotificationsPlugin.initialize(initializationSettings, onDidReceiveNotificationResponse: (NotificationResponse response) {}); } SystemChrome.setPreferredOrientations([ DeviceOrientation.portraitUp, DeviceOrientation.portraitDown, ]).then((value) => runApp(const App())); await JustAudioBackground.init( androidNotificationChannelId: 'com.ryanheise.bg_demo.channel.audio', androidNotificationChannelName: 'Audio playback', androidNotificationOngoing: true, ); await AccountServices().initialization.then((value) { Get.put(CartController()); }); }
3. 存储权限补充说明(针对Android 13)
如果你的应用仍需访问外部存储,Android 13已将原READ_EXTERNAL_STORAGE拆分为细分权限:
- 访问图片:
READ_MEDIA_IMAGES - 访问视频:
READ_MEDIA_VIDEO - 访问音频:
READ_MEDIA_AUDIO
需根据实际需求在Manifest中添加对应权限,并使用permission_handler请求对应权限(如Permission.photos、Permission.videos等)。
内容的提问来源于stack exchange,提问作者Rubens Alban
相关产品推荐
相关产品推荐

