我无法将我的位图保存到 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
据此,我假设文件保存成功。但它不会出现在图库中。我尝试了很多解决方案,但没有任何效果。请帮助我。
只有在成功完成媒体扫描后才会显示文件。
备注
将文件保存到外部存储器。现在路径是 Android 数据文件夹。大多数情况下,数据文件夹中的文件不会被媒体扫描仪扫描。
为此使用 Environment.getExternalStorageDirectory().getAbsolutePath()+"/Pictures/Foldername/"
作为文件夹路径
Environment.getExternalStorageDirectory().getAbsolutePath()
将 Return ExternalStorge 作为路径
Run Media Scanner
我正在尝试将编辑后的图像保存到用户可以访问的图库中。 我使用了参考资料中的 "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
据此,我假设文件保存成功。但它不会出现在图库中。我尝试了很多解决方案,但没有任何效果。请帮助我。
只有在成功完成媒体扫描后才会显示文件。
备注
将文件保存到外部存储器。现在路径是 Android 数据文件夹。大多数情况下,数据文件夹中的文件不会被媒体扫描仪扫描。 为此使用
Environment.getExternalStorageDirectory().getAbsolutePath()+"/Pictures/Foldername/"
作为文件夹路径Environment.getExternalStorageDirectory().getAbsolutePath()
将 Return ExternalStorge 作为路径Run Media Scanner