问题标签 [android-storage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
741 浏览

java - Android SAF 可以访问 SD 卡上的特定目录

我仍在寻找,但也许有人面临同样的问题。我正在维护一个应用程序。这个应用程序将一些数据存储在两个地方(比如说在 sdcard/example 和 external_memory/example 上)。在迁移到最新的 Android Api 之前,使用ExternalStorage.getAllExternalStoragePaths(). 现在我仍然能够获得两条路径,但是 sdcard/example 路径不可读也不可写..

我阅读了有关 SAF 的信息,但在我的情况下,这不是一个解决方案——存储在两个目录中的文件都是使用本机库(C++)解析的——我需要它的路径,比如/storage/sdcard/example/test.xml. 否则库无法读取此文件。不幸的是,由于缺少资源,我无法更改库。

我想问三个问题:

  • 有没有其他方法可以要求访问 SD 卡上的目录并像旧方式一样使用该目录?
  • 也许我可以说 Android -“嘿,我想在 SD 卡上有 Example 目录并维护它”?
  • 或者我可以在没有 ContentResolver 的情况下使用 SAF?

/storage/sdcard/Android/data/com.example/files/利益相关者不接受将文件移动到其中。

0 投票
2 回答
744 浏览

android - Sharedpreferences Vs SQLite 无需搜索即可处理大数据

我知道 SQLite 在技术上是为大量数据而设计的,而 SharedPreferences 对于简单数据类型来说更容易、更快。

我想为一年中的每一天存储简单的真假布尔值。这意味着我要么必须创建 3 维 json 并将其作为字符串存储在共享首选项中(或者以年份为键的维度数组),要么创建具有年份月份和数据作为单独列的表(或者它可以是简单的日期列.. . 话虽如此,我也可以在 sharedPreferences 中使用“YYYY-MM-DD”作为 365 个布尔值的键)。

现在问题来了。如果我 100% 确定我不需要通过特殊参数功能进行任何搜索/分组/选择,我是否应该使用更复杂的 SQLite 数据库来存储这些简单数据。因为在我看来,如果我需要存储简单的布尔值(即使总共有 365 个以上的布尔值),我应该使用 SharedPreferences,因为它是一个更快的解决方案。但这对我来说似乎有点不对,因为我不确定 SharedPreferences 是否应该存储这么多变量。

添加:

这些布尔值仅在本地存储以供离线加载或从用户角度更快地访问。这些 1|0 值存储在每个应用程序用户的服务器上,因此即使我会对数据进行一些复杂的工作,我也不确定是否需要在手机上进行。

0 投票
1 回答
347 浏览

android - MediaStore.Audio.Media.EXTERNAL_CONTENT_URI 不在数据文件夹内扫描

我正在使用 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI 从设备获取音乐文件。对于其他文件夹,它工作正常。但它不是在应用程序的数据文件夹中获取/扫描音乐文件(getFilesDir()。getAbsolutePath())......为什么?有什么限制吗???TIA。

0 投票
0 回答
36 浏览

android - 存储对带有附加信息的 .mp3 文件的引用的最佳方式,保存在手机存储/外部卡中

我目前正在开发有声读物播放器应用程序,我正在考虑如何保留对有声读物文件的引用。

到目前为止,我让用户指定保存书籍的文件夹并识别子文件夹/特定书籍。

现在我需要存储这些引用。有声读物总是分很多部分发行,所以假设我们有一本“风暴季节”一书,我们有这本书的 20 个部分:seasonofstorms-part1、seasonofstorms-part2 等等。

我需要将它们与特定书籍保持联系,并且我需要存储更多附加信息,例如用户完成收听的部分的名称,以及再次打开书籍时该部分应该开始的时间。

所以我认为它可以很好地适应一些 JSON 模式。我可以制作像这样的 POJO:

  • 显示字段:名称和列表部分,
  • 带有字段的部分:状态[完成,未开始,进行中],时间。

恢复收听书籍后,应用程序将搜索状态为“进行中”的部分并在“时间”开始播放。我可以将这些 POJO 解析为 JSON 并将它们保存在 SharedPreferences 中。你怎么看这种方法?一些更好的选择?我怎样才能以任何其他方式完成这项工作,您认为最好的方法是什么?

0 投票
0 回答
1794 浏览

java - Can't get content URI for file in external-files-path on some devices

My application uses FileProvider to get a content URI for a file created in a subdirectory on the external storage and grant permissions to the selected camera application so it can save a photo to that file. It works like a charm on every device and emulator except one which I don't own - Huawei Honor 7 (I have a crash log from that device). I'm trying to understand the problem and find a way to fix it.

AndroidManifest.xml

file_provider_paths.xml


When I create an empty file to share with the camera application, I obtain the base external directory path using Context.getExternalFilesDir(null). It usually returns a path like this: /storage/emulated/0/Android/data/<package>/files

which is the same as these:

  • Context.getExternalFilesDirs(null)[0]
  • ContextCompat.getExternalFilesDirs(context, null)[0]

And I put the file a bit deeper, e.g. /storage/emulated/0/Android/data/<package>/files/247/images/ad4b7cd7-8917-43d5-8f6c-69555d76c0e0

Then I call FileProvider.getUriForFile(context, "<package>.fileprovider", file)

As I said, it works properly on everything I have, both emulators and devices, with APIs 19 to 25.


Now, there is that crash:


I have found out that the current FileProvider implementation matches the external-files-path tag with this piece of code:

So my idea is that maybe Context.getExternalFilesDir(null) gives a different storage directory than ContextCompat.getExternalFilesDirs(context, null) at 0 index. If so, I would create a file on the storage which is not supported by the FileProvider.

I have also found some issue reported to Google regarding this limitation.

Do you think that's the real root cause or do you have any other ideas?

0 投票
1 回答
918 浏览

android - 从外部存储加载 ListView 上的 .mp3 文件列表不适用于棉花糖

可能这在 Lolipop/Kitkat 之前有效,但我没有测试它。我正在我的 xperia m2 aqua 上的棉花糖上测试它,它没有显示我的可移动 sdcard 中的音乐,所以,我从 sdCard 复制了两首音乐到内部存储,它正在显示这两首音乐。其他音乐播放器在手机上运行良好。下面是我的代码:

来自上述代码结果的 Log.d

清单许可

和 Permisson 以编程方式用于 Marshmallow 及更高版本

结果 它只显示来自内部存储的歌曲。我已将两首歌曲添加到内部存储以进行检查,并且显示。尽管我已经设置了权限和所有工作代码,为什么不从 sdCard 读取?

更新

@Manoj 已将此问题标记为可能重复,但事实并非如此。我已经给予了适当的许可,如果用户也点击了拒绝,那么下次它会再次询问。在我的代码中,我使用 if/else 来获得许可,我认为@Manoj 没有清楚地看到它。

0 投票
2 回答
53 浏览

android - android getExternalStoragePublicDirectory 无法在 4.4.2 中写入,尤其是在 Smasung S3 中

该目录无法在 android 4.4.2 中写入

另外,我使用了清单WRITE_EXTERNAL_STORAGE

0 投票
2 回答
993 浏览

android - 尝试使用 getExternalFilesDir(),Android 将下载的文件保存在 SD 卡中

我想下载一个文件,然后将其保存到设备的 SD 卡中。我为此使用 getExternalFilesDir(),这也是 Android 开发人员组推荐的,但是当我运行我的应用程序时,在两个位置(SD 卡和内部存储器)都有为应用程序包创建的目录,但是文件保存在内部存储器中。

0 投票
4 回答
1884 浏览

android - 在 android 上存储 JSON:sqlite 与 SharedPreference

对于允许我的组织成员在他们的移动设备上查看数据的应用程序,我需要在设备上存储预先格式化的数据,以便他们也可以离线查看。他们如何获取数据是通过 JSON 请求-响应。

响应格式如下(匿名 ofc):

我已经阅读了一些关于如何最好地存储它的讨论:

可以在 SharedPreferences 中保存 JSON 数组吗?

如何在 SharedPreferences 中保存 JSON 数组?

Android:在 android 中为应用程序离线存储 JSON 数据的最佳方式是什么?

Android - 如何将 JSON 对象添加到 sharedPreferences?

使用 SQLite 而不是 File 有什么优势?

通过阅读这些,我了解到 SharedPreference 文件比 sqlite 文件“更快”,但容易损坏。SQLite 是一个数据库,由于数据来自一个数据库,因此我倾向于以牺牲处理速度为代价来使用它。

现在我只需要存储然后读取数据,除非“主服务器”上有更新,否则它不会发生变异,在这种情况下,我可能会擦除本地数据并重新填充它。在这些线程中,我读到将 JSON 存储在 sharedpreference 中很容易但难以阅读。

但是在阅读了这些(以及更多)讨论之后,我并没有更接近了解/决定存储我的 json 的最佳方式是什么。

任何意见是极大的赞赏!

0 投票
1 回答
1559 浏览

android - 如何在Android中将Image本地存储路径设置为ListView

在此处输入图像描述

我的自定义列表适配器代码...

}

我收到了一个 imagePath 列表,例如

d:阵列路径/存储/sdcard/DCIM/Camera/IMG_20170210_163055.jpg

d:阵列路径/存储/sdcard/DCIM/Camera/IMG_20170210_163037.jpg

d:阵列路径/存储/sdcard/DCIM/Camera/IMG_20170217_175804.jpg

d:阵列路径/存储/sdcard/DCIM/Camera/IMG_20170217_175802.jpg

d:阵列路径/存储/sdcard/DCIM/Camera/IMG_20170210_163056.jpg

现在我想使用自定义适配器或使用 ArrayAdapter 将这些路径显示到列表视图。