Android构建MicroStream示例应用出现文件访问拒绝错误如何解决
错误根因
报错核心是MicroStream默认使用相对路径storage/作为存储目录,Android系统禁止应用直接在进程根路径下创建读写文件,触发权限拒绝异常。
解决方案
方案一:使用应用专属内部存储(推荐,无需额外权限)
Android应用的内部专属目录本身具备读写权限,不需要申请任何权限,适配所有系统版本,操作步骤如下:
- 先在Context中获取合法的可写目录路径
// Activity/Fragment中调用,生成应用内部专属的MicroStream存储目录 val microStreamDir = File(filesDir, "microstream_data").absolutePath
- 初始化MicroStream时显式指定存储路径,不要使用无参的
EmbeddedStorage.start()
// 传入自定义根对象+合法存储路径初始化 val storageManager = EmbeddedStorage.start( myRootData, // 你自己定义的存储根数据对象 Paths.get(microStreamDir) )
方案二:使用公共存储目录(需动态申请权限)
如果需要把存储数据放在公共存储空间允许其他应用访问,需做权限适配:
- 在
AndroidManifest.xml中添加权限声明
<!-- 公共存储读权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- Android 12及以下公共存储写权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <!-- Android13+如果存储非媒体文件,需申请MANAGE_EXTERNAL_STORAGE权限,需Google Play审核 -->
- 初始化MicroStream之前,先动态申请存储权限,用户授权通过后再执行初始化逻辑。
注意事项
- 初始化操作属于IO操作,不要在主线程直接执行,避免阻塞主线程触发ANR,建议放到子线程或协程中执行。
- 版本升级可选:可把依赖替换为MicroStream官方适配Android的专用依赖,进一步简化平台适配逻辑。
内容的提问来源于stack exchange,提问作者Vivek
相关产品推荐
相关产品推荐

