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

Flutter应用真机正常,Android模拟器遇文件权限拒绝错误(errno=13)

解决Flutter应用Android模拟器FileSystemException权限问题

问题分析

你的Flutter应用在Galaxy S20真机运行正常,但在Pixel_3a_API_33(Android 13)模拟器上抛出FileSystemException: Cannot open file, path = ... (OS Error: Permission denied, errno = 13),结合你提供的AndroidManifest.xml,可以从以下几个方面排查修复:


1. 修复Manifest语法错误

你的Manifest里存在明显的语法错误:

<!-- 错误写法 -->
<applicationPixel_3a_API_33
<!-- 正确写法 -->
<application

这个错误会导致Manifest解析异常,模拟器对语法的校验通常比真机更严格,先修正这个问题。

2. 适配Android 13(API33)的存储权限

Android 13对存储权限进行了拆分,原有的WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE权限已被废弃,针对不同文件类型需要使用新权限:

  • 如果操作媒体文件(图片/音频/视频),替换为:
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
    
  • 如果需要操作所有文件(非媒体文件),保留MANAGE_EXTERNAL_STORAGE,但注意这个权限属于特殊权限,需要在代码中引导用户手动开启。

3. 手动为模拟器应用授予权限

模拟器有时不会自动弹出权限请求弹窗,需要手动操作:

  • 打开模拟器的「设置」→「应用」→找到你的应用→「权限」→「存储」
  • 若使用MANAGE_EXTERNAL_STORAGE,需要开启「允许管理所有文件」选项

4. 确认文件访问路径

检查代码中使用的文件路径:

  • 如果是访问应用私有外部存储(如getExternalFilesDir()),不需要声明上述存储权限,这类路径仅当前应用可访问
  • 若路径指向公共存储目录(如Environment.getExternalStorageDirectory()),则必须确保权限已正确授予

5. 移除无效配置

android:requestLegacyExternalStorage="true"仅对Android 10(API29)生效,在Android 13(API33)上无作用,可以移除该配置。


修改后的示例Manifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.chatgpt_audio_learn">
   <application
        android:label="chatgpt_audio_learn"
        android:name="${applicationName}"
        android:icon="@mipmap/ic_launcher">        
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <!-- 适配Android13的媒体权限 -->
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
</manifest>

内容的提问来源于stack exchange,提问作者Jean-Pierre Schnyder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:25:48