gpt4 book ai didi

Android - 为什么我保存的图片没有出现在手机的默认图库中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:25 24 4
gpt4 key购买 nike

我正在尝试将应用程序中的图像保存到手机的默认图库中。如果我的手机上有 SD 卡,下面的代码可以完美运行。保存的图像出现在手机的画廊和所有内容中,如预期的那样:

private Uri saveMediaEntry(File f, String title, String description, int orientation,      Location loc) {

ContentValues v = new ContentValues();
v.put(Images.Media.TITLE, title);
v.put(Images.Media.DISPLAY_NAME, title);
v.put(Images.Media.DESCRIPTION, description);

v.put(Images.Media.ORIENTATION, orientation);

String nameFile = f.getName();
File parent = f.getParentFile() ;
String path = parent.toString().toLowerCase() ;
String nameParent = parent.getName().toLowerCase() ;
v.put(Images.ImageColumns.BUCKET_ID, path.hashCode());
v.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, nameParent);
v.put(Images.Media.SIZE,f.length()) ;

if( nameFile.toLowerCase().contains(".png") ){
v.put(Images.Media.MIME_TYPE, "image/png");

}else if( nameFile.toLowerCase().contains(".jpg") ||
nameFile.toLowerCase().contains(".jpeg") ){
v.put(Images.Media.MIME_TYPE, "image/jpeg");

}else{
v.put(Images.Media.MIME_TYPE, "image/jpeg");
}

String imagePath = f.getAbsolutePath();
v.put("_data", imagePath) ;
ContentResolver c = getContentResolver() ;

Uri uriOfSucessfulySavedImage = null;
uriOfSucessfulySavedImage = c.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, v);

return uriOfSucessfulySavedImage;
}

但是,如果我尝试将相同的图像保存到内部存储器中(当手机没有 SD 卡时),图像不会出现在手机的图库中!为了尝试做到这一点,我只更改了上面代码中的一行:

uriOfSucessfulySavedImage = c.insert(MediaStore.Images.Media.INTERNAL_CONTENT_URI, v);

不过,有趣的是变量 uriOfSucessfulySavedImage 不为空(它返回 content://media/internal/images/media/x,其中“x”是一个数字)。因此,图像被保存在手机内部存储的某个地方,但它没有像我使用 MediaStore.Images.Media.EXTERNAL_CONTENT_URI 时那样显示在手机图库中。

有人知道发生了什么事吗?如何将图像保存到手机的内部存储器中并将该图像保存在手机的图库中

更新

我忘记了一个重要信息。 “saveMediaEntry” 方法参数中的文件“f”来自此其他方法,用于安装 SD 卡时(即第一个代码):

public static File getCacheDirectory(String desiredNameOfTheDirectory){

File fileCacheDir = null;

if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) ){

fileCacheDir = new File( Environment.getExternalStorageDirectory(), desiredNameOfTheDirectory );
}


if(!fileCacheDir.exists()){
fileCacheDir.mkdirs();
}

return fileCacheDir;
}

以及当 SD 卡建立时的以下代码:

public static File getCacheDirectory(String desiredNameOfTheDirectory, Context   context){

File fileCacheDir = null;

fileCacheDir = context.getCacheDir();

if(!fileCacheDir.exists()){
fileCacheDir.mkdirs();
}

return fileCacheDir;
}

最佳答案

另一种简单的方法。保存文件后添加此内容。

File imageFile = ...
MediaScannerConnection.scanFile(this, new String[] { imageFile.getPath() }, new String[] { "image/jpeg" }, null);

关于Android - 为什么我保存的图片没有出现在手机的默认图库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11552014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com