通过Android中的OPEN_READWRITE访问在SD卡上打开SQLiteDatabase数据库

通过Android中的OPEN_READWRITE访问在SD卡上打开SQLiteDatabase数据库,第1张

概述有没有办法通过OPEN_READWRITE访问从SD卡打开SQLite Database文件?这适用于用户提供的外部数据库文件,而不是内部应用程序数据. (编辑:处理Uri以获取实际文件路径,但硬编码为简化示例) 以下工作使用应用程序外部的内部手机存储路径: SQLiteDatabase sqlite = SQLiteDatabase.openDatabase( "/storage/emu 有没有办法通过OPEN_READWRITE访问从SD卡打开sqlite Database文件?这适用于用户提供的外部数据库文件,而不是内部应用程序数据. (编辑:处理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",sqliteDatabase.OPEN_READWRITE | sqliteDatabase.NO_LOCAliZED_ColLATORS);

例外:

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",sqliteDatabase.OPEN_Readonly | sqliteDatabase.NO_LOCAliZED_ColLATORS);

清单中的外部存储权限:

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

希望Storage Access Framework或Lollipop SD API可以提供帮助,但我没有运气.

有没有办法打开一个具有SD卡写访问权限的sqliteDatabase文件?

解决方法 可能与此有关:
“AndroID 4.4 KitKat与旧的4.3 Jellybean更新相比带来了很多变化.其中一个最重要的变化是它如何处理存储数据安全性.

在AndroID 4.4 KitKat之前,如果应用程序有权访问外部SD卡,则可以读取和写入可移动存储上的任何区域,包括DCIM,警报等系统文件夹.这些已经全部更改,现在是第三个 – 派对应用程序,例如您从Google Play或其他地方下载的应用程序,只能写入已创建或已拥有所有权的文件和文件夹.“

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

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

总结

以上是内存溢出为你收集整理的通过Android中的OPEN_READWRITE访问在SD卡上打开SQLiteDatabase数据库全部内容,希望文章能够帮你解决通过Android中的OPEN_READWRITE访问在SD卡上打开SQLiteDatabase数据库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1125442.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存