问题描述
这是我在 Stackoverflow 上的第一篇文章,所以我真的很抱歉,如果我没有以正确的方式做这件事。 我的问题是我想将位图保存为手机图库中的图像 (.jpg)。 以下代码在任何版本的 Android =10 中不起作用。我想知道我是否可以针对 Android >= 10 的版本调整此代码?如果没有,您对我的问题有任何解决方案吗? 非常感谢您花时间阅读甚至回答!
这是我的代码:
public void saveTempBitmap(Bitmap bitmap) {
if (isExternalStorageWritable()) {
saveImage(bitmap);
}else{
System.out.println("no privilege");
}
}
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
private void saveImage(Bitmap finalBitmap) {
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/Images_Exportées");
myDir.mkdirs();
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String fname = "ColoriageExporté"+ timeStamp +".jpg";
File file = new File(myDir,fname);
if (file.exists())
file.delete ();
try {
FileOutputStream out = new FileOutputStream(file);
finalBitmap.compress(Bitmap.CompressFormat.JPEG,100,out);
out.flush();
out.close();
} catch (Exception e) {
e.printstacktrace();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Intent mediaScanIntent = new Intent(
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri contentUri = Uri.fromFile(file); //out is your file you saved/deleted/moved/copied
mediaScanIntent.setData(contentUri);
getContext().sendbroadcast(mediaScanIntent);
} else {
getContext().sendbroadcast(new Intent(
Intent.ACTION_MEDIA_MOUNTED,Uri.parse("file://"
+ Environment.getExternalStorageDirectory())));
}
}
这是我得到的错误:
W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Images_Exportées/ColoriageExporté20210202_184518.jpg: open Failed: ENOENT (No such file or directory)
W/System.err: at libcore.io.IoBridge.open(IoBridge.java:496)
at java.io.FileOutputStream.<init>(FileOutputStream.java:235)
at java.io.FileOutputStream.<init>(FileOutputStream.java:186)
at com.example.coloriage.galerieParent.saveImage(galerieParent.java:629)
at com.example.coloriage.galerieParent.saveTempBitmap(galerieParent.java:602)
at com.example.coloriage.galerieParent$4$1.onClick(galerieParent.java:147)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:177)
at android.os.Handler.dispatchMessage(Handler.java:107)
W/System.err: at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8178)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
W/System.err: Caused by: android.system.ErrnoException: open Failed: ENOENT (No such file or directory)
at libcore.io.Linux.open(Native Method)
W/System.err: at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:252)
at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:8046)
at libcore.io.IoBridge.open(IoBridge.java:482)
... 12 more
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)