Android 无法将图像保存到库

Android 无法将图像保存到库,android,bitmap,android-storage,Android,Bitmap,Android Storage,我正在尝试使用MediaStore将位图作为图像保存到手机存储器中,如下所示: MediaStore.Images.Media.insertImage(contentResolver, bitmap, "title" , "description") 映像未保存在设备存储器中,我已在模拟器和物理设备上进行了检查 到目前为止我做了什么: 检查我正在传递的位图是否为我想要的位图: 为此,我在调试器的帮助下检查了它的值,如下所示: MediaStore.Images.Media.insert

我正在尝试使用MediaStore将位图作为图像保存到手机存储器中,如下所示:

 MediaStore.Images.Media.insertImage(contentResolver, bitmap, "title" , "description")
映像未保存在设备存储器中,我已在模拟器和物理设备上进行了检查


到目前为止我做了什么:

  • 检查我正在传递的位图是否为我想要的位图:

    为此,我在调试器的帮助下检查了它的值,如下所示:

     MediaStore.Images.Media.insertImage(contentResolver, bitmap, "title" , "description")
    
    1)在应该保存图像的行上放置一个断点,并检查我传递的位图,该位图与我要保存的位图相同:

    2)位图就是这样的:

  • 确保用户已授予将文件写入外部存储器(下一行)的权限



  • 确保图像未保存在库的末尾或设备存储器中的任何其他位置



我知道,如中所述,我可能不使用MediaStore就可以保存图像,但我想知道我在这里做错了什么,以及为什么我不能将位图保存为设备存储器中的图像。

我尝试过这个方法,但也没有成功。所以我使用了Android下载管理器,它简单易行;-)

这是密码

/*
This method can be used to download an image from the internet using a url in Android. This use Android Download Manager to
download the file and added it to the Gallery. Downloaded image will be saved to "Pictures"
Folder in your internal storage
*/

private void downloadImageNew(String filename, String downloadUrlOfImage){
    try{
        DownloadManager dm = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
        Uri downloadUri = Uri.parse(downloadUrlOfImage);
        DownloadManager.Request request = new DownloadManager.Request(downloadUri);
        request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE)
                .setAllowedOverRoaming(false)
                .setTitle(filename)
                .setMimeType("image/jpeg") // Your file type. You can use this code to download other file types also.
                .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
                .setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES,File.separator + filename + ".jpg");
        dm.enqueue(request);
        Toast.makeText(this, "Image download started.", Toast.LENGTH_SHORT).show();
    }catch (Exception e){
        Toast.makeText(this, "Image download failed.", Toast.LENGTH_SHORT).show();
    }
}

由于某种原因,即使在授予
WRITE\u EXTERNAL\u STORAGE
之后,在查看了一些日志后,我发现我遇到了以下错误:

Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=11218, uid=10079 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
这在我看来很奇怪,因为我在将图像保存到图库之前已经检查过是否授予了此权限


对我来说,解决问题的办法是删除应用程序并重新安装它

插入图像返回什么?你在logcat中有任何带有
MediaStore
标签的日志吗?@esentsov我没有找到任何使用
MediaStore
的日志,但这主意不错。我刚刚检查了
insertImage
的作用,发现它@将URL返回到新创建的图像,或者
null
如果图像由于任何原因无法存储*。我指的是它在代码中返回的内容。它返回空值吗?@esentsov谢谢你的帮助。我设法解决了这个问题,如果你们想稍后检查,我会写下答案