【问题标题】:Save photo into SD card using "Environment.getExternalStorageDirectory()" not work使用“Environment.getExternalStorageDirectory()”将照片保存到 SD 卡中不起作用
【发布时间】:2016-06-24 02:38:56
【问题描述】:

我查看了一些线程以了解如何将照片保存到 SD 卡中。他们都说使用“Environment.getExternalStorageDirectory()”来获取 SD 卡路径。我试过了,但我得到了“/storage/emulated/0/”,这不是电话的 SD 卡。谁能帮帮我?

我的设备是三星 Galaxy J7 和 A5。

我的另一部分代码使用 DowloadManager 从 url 保存照片。我也想知道如何设置它以保存到 SD 卡中。

    DownloadManager mgr = (DownloadManager) mPhotosViewActivity.getSystemService(Context.DOWNLOAD_SERVICE);
    String uRl = imageUrl;
    Uri downloadUri = Uri.parse(uRl);
    DownloadManager.Request request = new DownloadManager.Request(
        downloadUri);

    request.setAllowedNetworkTypes(
        DownloadManager.Request.NETWORK_WIFI
                | DownloadManager.Request.NETWORK_MOBILE)
        .setAllowedOverRoaming(false).setTitle("MyFolder")
        .setDescription("Photo downloaded.")
        .setDestinationInExternalPublicDir("/MyFolder", "test2.jpg");

最后我发现我使用的是 Lollipop,我必须使用“存储访问框架”作为this link

【问题讨论】:

  • 显示一些代码和错误日志(如果有)..
  • @ELITE 没有任何错误,但它只是保存到手机而不是 sd 卡。

标签: android save


【解决方案1】:

在 Android 4.4+ 上,您可以在 Context 上使用 getExternalFilesDirs()getExternalCacheDirs()getExternalMediaDirs()(注意:都是复数形式)。如果他们返回 2+ 个条目,则第二个和后续条目将在可移动存储上。您可以在没有任何权限的情况下读取和写入这些目录。

或者,在 Android 4.4+ 上,您可以使用the Storage Access Framework 询问用户将照片存储在哪里。用户可以选择在可移动存储上选择一个位置。

否则,在 Android 4.4+ 上,you do not have direct access to the filesystem of removable storage

Environment.getExternalStorageDirectory() 用于external storage。通常,这不在可移动媒体上。

【讨论】:

  • 事实上,在不支持 SD 卡的设备中,它们都是一样的吗?我是说 Nexus 5?
  • @shaheen:我不知道“它们都一样”是什么意思,抱歉。
  • @CommonsWare 谢谢。 getExternalFilesDirs() 给我很好的 sd 卡路径。但是,我的代码的任何部分都使用 DownloadManager 从 url 保存照片。你知道如何设置它来保存到SD卡吗?
  • @ปรีดาตั้งนภากร:我怀疑DownloadManager 有办法下载到可移动存储。
【解决方案2】:
String MY_FOLDER = "MyFolder";
// this method will give you the path of external storage
// which may be your internal storage directory.
String extStore = System.getenv("EXTERNAL_STORAGE");
File f_exts = new File(extStore, MY_FOLDER);

//this method will give you the secondary storage path
//which is memory SD Card path
String secStore = System.getenv("SECONDARY_STORAGE");
File f_secs = new File(secStore, MY_FOLDER);

更多详情请参考this答案。

希望它会起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多