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

如何在Flutter中打开已创建的SQLite数据库?解决权限报错

解决Flutter安卓端无法读取外部存储SQLite数据库的问题

1. 申请存储访问权限

安卓系统限制应用直接访问外部存储文件,必须先获取对应权限:

  • 在pubspec.yaml中添加权限依赖:
dependencies:
  permission_handler: ^10.2.0
  • 修改数据库初始化逻辑,确保打开数据库前已拿到权限:
import 'package:permission_handler/permission_handler.dart';

Future<Database> _initDatabase() async {
  // 请求存储权限
  var permissionStatus = await Permission.storage.request();
  if (!permissionStatus.isGranted) {
    throw Exception("存储权限未授予,无法访问数据库文件");
  }

  print('1');
  Database database = await openDatabase(
    '/storage/emulated/0/Etudes/PFE/Implementation/database/example.db',
    version: 1,
  );
  print('2');
  return database;
}

注意:安卓13及以上需使用细分权限(如Permission.photos),若数据库不属于媒体文件,可使用Permission.manageExternalStorage(该权限需谷歌应用商店特殊审核,谨慎使用)。

2. 避免硬编码存储路径

硬编码路径在不同设备上可能失效,用path_provider包获取标准外部存储路径:

  • 添加依赖:
dependencies:
  path_provider: ^2.0.15
  • 动态拼接数据库路径:
import 'package:path_provider/path_provider.dart';
import 'dart:io';

Future<Database> _initDatabase() async {
  var permissionStatus = await Permission.storage.request();
  if (!permissionStatus.isGranted) {
    throw Exception("存储权限未授予");
  }

  // 获取应用外部存储根目录
  Directory? externalStorageDir = await getExternalStorageDirectory();
  String dbPath = '${externalStorageDir!.path}/Etudes/PFE/Implementation/database/example.db';
  
  print('1');
  Database database = await openDatabase(
    dbPath,
    version: 1,
  );
  print('2');
  return database;
}

3. 调整数据库文件权限

Python脚本创建的文件可能仅对创建者开放读取权限,需修改文件权限:

  • 手动操作:在手机文件管理器中找到目标数据库,将权限设置为「允许所有应用读取」
  • 命令行操作(需连接电脑):
adb shell chmod 644 /storage/emulated/0/Etudes/PFE/Implementation/database/example.db

4. 适配安卓10+分区存储规则

安卓10(API 29)及以上启用分区存储,应用默认无法直接访问外部存储的自定义目录,可选两种方案:

  • 将数据库文件移动到getExternalStorageDirectory()返回的应用专属外部存储目录下
  • 在AndroidManifest.xml中添加兼容配置(仅安卓10生效):
<application
    ...
    android:requestLegacyExternalStorage="true">
</application>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:45:31