微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android 版本> 10 将位图保存在手机存储中

如何解决Android 版本> 10 将位图保存在手机存储中

这是我在 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 举报,一经查实,本站将立刻删除。