java 尝试显示OpenStreetMapMap时出现文件存储错误

kgsdhlau  于 2023-03-06  发布在  Java
关注(0)|答案(2)|浏览(127)

我使用OpenStreetMap的Android应用程序几个月来一直运行良好,现在却无法再显示OpenStreetMapMap。尽管授予了WRITE_EXTERNAL_STORAGE权限,我还是收到了如下消息:

E/OsmDroid: Unable to start the SQLite tile writer. Check external storage availability.
I/StorageUtils: /storage/emulated/0 is NOT writable

由于我的目标是API29并在Android 10手机上运行,我认为问题与外部存储访问的新政策和使用存储访问框架的要求有关,对吗?
不管我是对是错,有没有人知道我该怎么补救?

zqry0prt

zqry0prt1#

由于您的目标是Andorid 10 - API 29,因此Android官方文档指出:

在Android 10上运行

如果您的应用面向Android 10(API级别29),请选择退出作用域存储,并继续使用适用于Android 9及更低版本的方法来执行此操作。
因此,您需要添加到AndroidManifest.xml:

<manifest ... >
<!-- This attribute is "false" by default on apps targeting
   Android 10 or higher. -->
    <application android:requestLegacyExternalStorage="true" ... >
     ...
    </application>
</manifest>

@blackapps这不是黑客攻击。

hsgswve4

hsgswve42#

一个更好的方法是将用于缓存的存储从外部移到内部。这必须在加载/膨胀视图之前完成。
对于活动:

Configuration.getInstance().osmdroidTileCache = filesDir

对于片段:

Configuration.getInstance().osmdroidTileCache = requireContext().filesDir

如果使用“活动绑定”,则必须在调用以下命令之前更改目录:

binding = ActivityNameBinding.inflate(layoutInflater)

否则,将构建Map视图并自动尝试访问外部存储。

相关问题