我无法将我的位图保存到 Android 中的画廊?

I can't save my bitmap to the Gallery in Android?

我正在尝试将编辑后的图像保存到用户可以访问的图库中。 我使用了参考资料中的 "Add the photo to the Gallery":https://developer.android.com/training/camera/photobasics.html

这是我的代码:

String mCurrentPhotoPath;
public void startSave() {

    FileOutputStream fileOutputStream = null;
    File new_file = null;

    try {
        new_file = createImageFile();
        fileOutputStream = new FileOutputStream(new_file);
        imageView.setDrawingCacheEnabled(true);
        Bitmap bitmap = Bitmap.createBitmap(imageView.getDrawingCache());
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
        Toast.makeText(this, "save Image Success", Toast.LENGTH_SHORT).show();
        fileOutputStream.flush();
        fileOutputStream.close();
    }
    catch (FileNotFoundException e){
        e.printStackTrace();
    }
    catch (IOException e){
        e.printStackTrace();
    }

    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    File f = new File(mCurrentPhotoPath);
    Uri contentUri = Uri.fromFile(f);
    mediaScanIntent.setData(contentUri);
    this.sendBroadcast(mediaScanIntent);
}

private File createImageFile() throws IOException {
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = "JPEG_" + timeStamp + "_";
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
    );

    // Save a file: path for use with ACTION_VIEW intents
    mCurrentPhotoPath = image.getAbsolutePath();
    return image;
}

我也这样改AndroidManifest.xml,给了外存写权限,给了Uri权限。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mypackage">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.mypackage.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths"></meta-data>
    </provider>
</application>

我根据这个添加了xml个文件路径:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="my_images" 
path="Android/data/com.sparkexel.blurd1/files/Pictures" />
</paths>

我无法理解这里的问题是什么。首先,出现有关未授予外部权限或 URI 权限的错误消息。之后我设置了 URI 权限。最后,控制台中没有错误消息。但是我无法将图像保存到图库中。我已经记录了我保存的文件的路径。它是:

/storage/emulated/0/Android/data/com.mypackage/files/Pictures/JPEG_20171216_171109_2682421804312420480.jpg

据此,我假设文件保存成功。但它不会出现在图库中。我尝试了很多解决方案,但没有任何效果。请帮助我。

只有在成功完成媒体扫描后才会显示文件。

备注

  1. 将文件保存到外部存储器。现在路径是 Android 数据文件夹。大多数情况下,数据文件夹中的文件不会被媒体扫描仪扫描。 为此使用 Environment.getExternalStorageDirectory().getAbsolutePath()+"/Pictures/Foldername/" 作为文件夹路径

    Environment.getExternalStorageDirectory().getAbsolutePath() 将 Return ExternalStorge 作为路径

  2. Run Media Scanner

另请参考Trigger Media Scanner Programattically