如何将图片保存到外部存储而不是内部存储?

4

我不明白为什么有些人说将文件保存在外部存储器是安全的,因为当我使用这段代码时,检查我的SD卡并没有发现文件。

以下是这段代码:

        OutputStream imageFileOS;
        int imageNum = 0;
        Intent imageIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        File imagesFolder = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), "Punch");
        if(!imagesFolder.exists()){
            imagesFolder.mkdirs(); // <----
        }
        String fileName = "image_" + String.valueOf(imageNum) + ".jpg";
        File output = new File(imagesFolder, fileName);
        while (output.exists()){
            imageNum++;
            fileName = "image_" + String.valueOf(imageNum) + ".jpg";
            output = new File(imagesFolder, fileName);
        }
        Uri uriSavedImage = Uri.fromFile(output);
        imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);

当我运行代码并检查时,它在“内部存储器/图片/打卡/image_0.jpg”中有文件,但在SD卡中看不到(SD卡=外部存储卡16 GB)。请帮助我。

你的应用程序是否需要请求写入SD卡的权限? - Amit
尝试查看Environment.DIRECTORY_PICTURES中的内容,可能会显示您的本地路径。 - Laser
使用此权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> - kumar_android
你好,Amit,请问在SD卡中写入的权限是什么?因为我只写了WRITE_EXTERNAL_STORAGE权限。 - Kronpat Minkwan
这段代码运行良好,但不保存在外部卡中(当我在 DDMS 中检查时,在 external_sd 中找不到,但在 sdcard 中有)。 - Kronpat Minkwan
"sdcard" 是主要的“外部”存储目录。 - IAmGroot
1个回答

2

我认为你对getExternalStorageDirectory的作用有些混淆。

它获取由设备制造商指定的主存储目录。这通常是"sdcard"。如你评论中所指定的"External_sd"实际上是一个次要的存储目录,该方法不会返回此目录。

这仍然不是受保护的内部存储,并且在连接到电脑时可以被挂载和访问。

来自Android文档:

注意:这里的“外部”一词可能会让人感到困惑。这个目录更好地被认为是媒体/共享存储。它是一个可以容纳相对较大数据量并且在所有应用程序之间共享(不强制执行权限)的文件系统。传统上,它是一个SD卡,但它也可以作为内置存储器在设备上实现,并且可以作为计算机上的文件系统挂载。


非常感谢大家的建议,让我更了解安卓。我会回来阅读更多安卓文档的^^。 - Kronpat Minkwan
@KronpatMinkwan 如果我回答了你的问题,请考虑将其标记为已接受的答案和/或点赞。这可以帮助其他处于相同情况的人,并表示感谢 :) - IAmGroot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接