【问题标题】:how to always store application to sdcard/external storage如何始终将应用程序存储到 sdcard/外部存储
【发布时间】:2013-09-20 17:22:42
【问题描述】:

我正在制作一个 android 应用程序,我想将下载的图像存储到 sdcard 或外部存储中。我面临的问题是,在某些手机上,图像存储在 sdcard 上,而在某些手机中,图像存储在内部存储器中,特别是在 Galaxy S4 等三星设备中。 S4中的文件路径请看附图。

File wallpaperDirectory = new File(
                    Environment.getExternalStorageDirectory()
                            + "/TestApp/");
            wallpaperDirectory.mkdirs();
            FileOutputStream out = new FileOutputStream(Environment
                    .getExternalStorageDirectory().toString()
                    + "/TestApp/" + secret + ".jpg");
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
            Toast.makeText(
                    getApplicationContext(),
                    "Wallpaper saved sucessfully \n"
                            + Environment.getExternalStorageDirectory()
                                    .toString() + "/TestApp/" + secret
                            + ".jpg", Toast.LENGTH_SHORT).show();
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                    Uri.parse("file://"
                            + Environment.getExternalStorageDirectory())));

【问题讨论】:

  • 这是因为在 Nexus 7 和三星 Galaxy S4 Google 版等设备上,它们没有外部卡。他们有模仿的。因此,该系统旨在将其存储在虚假的外部位置。
  • @JaySnayder:不是真的。 “外部”!=“可移动”。
  • 简而言之,没有。您不能以任何 API 支持的方式执行此操作。
  • @CommonsWare 不,这并不意味着可移动,但它确实意味着在内部应用程序位置以外的其他位置。您不会将您的应用程序位置写入内部。您正在写信给外部。
  • 是不是说明代码没有问题?

标签: android file sd-card android-sdcard


【解决方案1】:

我正在制作一个 android 应用程序,我想将下载的图像存储到 sdcard 或外部存储中。

Android SDK 提供对外部存储的访问。这是“sdcard”还是其他东西取决于设备制造商。

我面临的问题是,在某些手机上,图像存储在 sdcard 上,而在某些手机中,图像存储在内存中,特别是在三星设备(如 Galaxy S4)中。

此代码将图像存储在外部存储中。它不会将它们存储在内部存储中。外部存储是否可移动取决于设备制造商。

您不妨考虑阅读the documentation about external storage

您还应该:

  • 不使用字符串连接来创建File 对象。使用正确的File 构造函数。

  • 将数据存储在比外部存储根目录下的硬编码TestApp 目录更好的位置,例如getExternalFilesDir()getExternalCacheDir()。多年来,您的方法一直被认为是糟糕的形式,因为它会使用户的外部存储变得混乱。

  • 使用更集中的方法来更新MediaStore,例如使用MediaScannerConnectionscanFile(),而不是像操作系统一样发送操作系统广播。

  • 确保在后台线程上完成所有这些工作(不清楚您是否来自代码片段)。

【讨论】:

  • 谢谢你这么好的解释。这是我在 android 开发的早期阶段。我会记住你指出的事情
猜你喜欢
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多