RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1069306
Accepted
Barmaley
Barmaley
Asked:2020-01-13 19:18:11 +0000 UTC2020-01-13 19:18:11 +0000 UTC 2020-01-13 19:18:11 +0000 UTC

Android Q,范围存储

  • 772

众所周知,在Android Q(API=29)中,谷歌再次改变了访问外部存储器(external storage)的规则,引入了Scoped Storage的概念。现在:

默认情况下,面向 Android 10(API 级别 29)及更高版本的应用会获得对外部存储或范围存储的范围访问权限。此类应用程序只能访问外部存储上特定于应用程序的目录,以及应用程序创建的特定类型的媒体。

我有一个应用程序使用 SQLite 数据库中的用户数据存储,该数据库位于外部存储器中。这是故意这样做的,因为根据之前的评论,有很多用户抱怨,当应用程序被拆除时,内部存储器(目录android/android/[пакет приложения]/files)中的数据也被破坏了。当然,该应用程序有能力备份数据和所有这些,但用户通常会忽略它。

结果,有一次我决定将数据存储在/Documents由方法返回的目录中,该方法Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)在 API 29 中被声明为已弃用

注意问题:SQLiteOpenHelper我需要做什么才能使用通常提供的访问存储在外部存储器中的 SQLite 数据库android:targetSdkVersion="29"?

更新

开放意味着使用标准设计:

 SQLiteDatabase db=SQLiteDatabase.openDatabase(file.getPath(), 
     null, 
     SQLiteDatabase.OPEN_READWRITE);
java
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. woesss
    2022-05-14T20:51:20Z2022-05-14T20:51:20Z

    Android 10 添加了一个属性<application>
    hasFragileUserData

    当用户卸载应用程序时,是否向用户显示保留应用程序数据的提示。默认值为“假”。

    也就是说,如果设置了该值,true用户将可以选择是否与应用程序一起删除数据。 https://stackoverflow.com/q/58750567/15923106

    当然,我想要更多:一些设置(以免考虑将临时文件推到哪里,以免它们保持自重并用它们的大小吓到用户)并且该复选框默认或选择启用.. .
    需要这个选项是很久以前添加的 - 许多开发人员原则上只是因为没有它而爬进外部存储器。
    不幸的是,该属性对 API 早于 29 的设备没有影响。

    • 1
  2. Circassian
    2020-05-07T02:05:03Z2020-05-07T02:05:03Z

    添加到清单:

    <application
        ...
        android:requestLegacyExternalStorage="true">
    
    • 0
  3. Best Answer
    FatherOfFiveChildren
    2020-09-07T22:29:03Z2020-09-07T22:29:03Z

    谷歌不会再好了,它会继续拧紧螺丝,使用本地目录中的数据库,退出活动时,通过Uri备份到U盘。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5