You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中Permission.photos请求失败,提示清单无对应权限

Flutter 图片选择权限请求报错:No permissions found in manifest for: []9

问题场景

实现本地图片选择功能时,权限请求环节出现日志错误:

D/permissions_handler( 1361): No permissions found in manifest for: []9

当前代码通过Permission.photos.request()请求相册权限,AndroidManifest已添加相关权限声明,但功能仍未正常工作。

核心原因

  1. 插件版本适配缺失:旧版permission_handler未适配Android 13的READ_MEDIA_IMAGES权限,导致无法识别Manifest中的权限配置。
  2. 权限映射不匹配:Permission.photos在Android 13+对应READ_MEDIA_IMAGES,而Android 12及以下对应READ_EXTERNAL_STORAGE,未区分版本请求会触发插件识别异常。
  3. 权限声明位置错误:若权限声明未放在<manifest>根标签下、<application>标签外,插件无法读取到权限配置。

解决方案

1. 升级permission_handler插件到适配版本

确保pubspec.yaml中插件版本≥10.0.0(支持Android 13权限):

dependencies:
  permission_handler: ^10.2.0 # 或更高兼容版本

执行flutter pub get更新依赖。

2. 区分Android版本请求对应权限

修改权限请求逻辑,根据系统版本选择正确的权限类型:

import 'dart:io'; // 需导入此包判断平台
// ... 其他代码

_loadPermission() async {
  if (Platform.isAndroid) {
    final androidInfo = await DeviceInfoPlugin().androidInfo;
    if (androidInfo.version.sdkInt >= 33) {
      // Android 13及以上,请求相册权限
      if (await Permission.photos.status != PermissionStatus.granted) {
        await Permission.photos.request();
      }
    } else {
      // Android 12及以下,请求存储权限
      if (await Permission.storage.status != PermissionStatus.granted) {
        await Permission.storage.request();
      }
    }
  } else if (Platform.isIOS) {
    // iOS平台统一请求相册权限
    if (await Permission.photos.status != PermissionStatus.granted) {
      await Permission.photos.request();
    }
  }
}

3. 修正AndroidManifest权限声明

确保权限声明放在<manifest>根标签下,且为Android 12及以下版本的存储权限添加maxSdkVersion限制:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 其他基础权限 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.VIBRATE"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.INTERNET"/>

    <!-- Android 13+ 相册权限 -->
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
    <!-- Android 12及以下 存储权限 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>

    <application ...>
        <!-- 应用组件配置 -->
    </application>
</manifest>

4. 清理缓存并重新构建

执行以下命令清理项目缓存,避免旧配置残留影响:

flutter clean
flutter pub get
flutter build apk

内容的提问来源于stack exchange,提问作者Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:42:20