gpt4 book ai didi

android - 在 Android 中使用 OPEN_READWRITE 访问权限在 SD 卡上打开 SQLiteDatabase 数据库

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:30 25 4
gpt4 key购买 nike

有没有办法通过 OPEN_READWRITE 访问权限从 SD 卡打开 SQLiteDatabase 文件?这是针对用户提供的外部数据库文件,而不是内部应用程序数据。 (编辑:处理 Uri 以获取实际文件路径,但为简化示例进行了硬编码)

以下工作使用内部手机存储路径,应用程序外部:

SQLiteDatabase sqlite = SQLiteDatabase.openDatabase(
"/storage/emulated/0/test.db",
null,
SQLiteDatabase.OPEN_READWRITE | SQLiteDatabase.NO_LOCALIZED_COLLATORS);

但是使用 SD 卡的路径会引发异常:

SQLiteDatabase sqlite = SQLiteDatabase.openDatabase(
"/storage/extSdCard/test.db",
null,
SQLiteDatabase.OPEN_READWRITE | SQLiteDatabase.NO_LOCALIZED_COLLATORS);

异常(exception):

android.database.sqlite.SQLiteException: not an error (code 0): Could not open the database in read/write mode.

但是用 OPEN_READONLY 打开效果很好:

SQLiteDatabase sqlite = SQLiteDatabase.openDatabase(
"/storage/extSdCard/test.db",
null,
SQLiteDatabase.OPEN_READONLY | SQLiteDatabase.NO_LOCALIZED_COLLATORS);

list 中的外部存储权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

希望Storage Access FrameworkLollipop SD API可以提供帮助,但运气不好。

有什么方法可以从 SD 卡打开具有写入权限的 SQLiteDatabase 文件?

最佳答案

可能与此有关:“与旧的 4.3 Jellybean 更新相比,Android 4.4 KitKat 带来了很多变化。最重要的变化之一是它处理存储数据安全的方式。

在 Android 4.4 KitKat 之前,应用程序只要有访问外部 SD 卡的权限,就可以读取和写入可移动存储上的任何区域,包括 DCIM、Alarms 等系统文件夹。这一切都改变了,并且现在,第三方应用程序(例如您从 Google Play 或其他地方下载的应用程序)只能写入他们创建或拥有所有权的文件和文件夹。”

http://technofaq.org/posts/2014/04/fixing-external-sd-card-write-issue-on-android-kitkat/

解决方案可能是之前将文件复制到本地文件夹 - 取决于您的用例。

关于android - 在 Android 中使用 OPEN_READWRITE 访问权限在 SD 卡上打开 SQLiteDatabase 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29562939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com