Android:我的应用程序保存的图像不会显示在gallery中——即使在重新启动后也是如此

Android:我的应用程序保存的图像不会显示在gallery中——即使在重新启动后也是如此,android,image,gallery,Android,Image,Gallery,我在Android应用程序中创建并保存图像: File dir = new File(Environment.getExternalStorageDirectory(), ".myappname/saved"); File imageFile = new File(dir, "IMG" + random() + ".jpg"); FileOutputStream out = new FileOutputStream(imageFile); bi.compress(Bitmap.CompressF

我在Android应用程序中创建并保存图像:

File dir = new File(Environment.getExternalStorageDirectory(), ".myappname/saved");
File imageFile = new File(dir, "IMG" + random() + ".jpg");
FileOutputStream out = new FileOutputStream(imageFile);
bi.compress(Bitmap.CompressFormat.JPEG, 100, out);
即使在重新启动后,图像也不会显示在库中

更新:我只显示部分代码!我还更正了我在编写StackOverFlow消息时引入的拼写错误。这些图像保存得很好——我可以查看它们——它们只是不显示在画廊中。 我刚从“.myappname”中删除了点--没有。画廊会显示图片。奇怪。正如我在下面所说的,其他应用程序将图像保存在点文件夹中,并显示在gallery中:(

将文件保存在SD卡上/“some Folder r”将反映在gallery中,gallery应用程序不会显示来自私人空间的图像。请更改代码行下方的内容

 File fwdir = new File(Environment.getExternalStorageDirectory(), "myappname/saved");

编辑:-已从目录名中删除。因为它将是隐藏文件夹。

您正在通过在文件夹名前加“.”(句点)创建一个隐藏文件夹。媒体扫描程序将忽略此操作。至少我在手动执行相同操作时看到了这种行为,我没有通过代码尝试过。
查看本文中的选项2

您当前的问题是。出现在文件路径中,使其隐藏,但在某些情况下,
画廊不会从私人空间填充图像
所以使用代码

在您的
onDestroy()方法中。
检查此链接

在活动中编写此函数

专用void扫描文件(字符串路径){

然后调用此函数保存图像

scanFile(yourFile.getAbsolutePath());

我看到了
fwdir
,我不知道这个变量是否用于
imageFile
。这是您的真实代码吗?可能您需要将代码更改为:
File imageFile=new File(fwdir,“IMG”+random()+“.jpg”)
我想这些答案会对你有所帮助,谢谢。我现在意识到这是点。我在发布这个问题之前确实考虑过这一点,但因为其他图像应用程序将其文件保存在前缀为“.”的文件夹中,并显示在“多媒体资料”中。非常奇怪。你不知道如何将图像保存在“.”带前缀的文件夹仍然显示在图库中?我想(并希望!)这是不可能的,作为一个Android手机用户,如果我试图隐藏一个文件夹,但它却显示在图库中,我会感到不安。我几天前在手机上做过这件事:)我不认为SD卡/文件夹上的imgae会反映在android本机图库中。人们应该为此建立MediaScannerConnection。
        MediaScannerConnection.scanFile(MainActivity.this,
                new String[] { path }, null,
                new MediaScannerConnection.OnScanCompletedListener() {

                    public void onScanCompleted(String path, Uri uri) {
                        Log.i("TAG", "Finished scanning " + path);
                    }
                });
    }
scanFile(yourFile.getAbsolutePath());