使用Android Nougat在图库中打开图片

使用Android Nougat在图库中打开图片,第1张

概述我想在 Android Nougat上的库中打开已保存的图像,但我得到的是一个黑色的图库页面,上面写着“无法加载照片”. 那是我的代码: 表现 <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.provider" 我想在 Android Nougat上的库中打开已保存的图像,但我得到的是一个黑色的图库页面,上面写着“无法加载照片”.

那是我的代码:

表现

<provIDer        androID:name="androID.support.v4.content.fileProvIDer"        androID:authoritIEs="${applicationID}.provIDer"        androID:exported="false"        androID:grantUriPermissions="true">        <Meta-data            androID:name="androID.support.file_PROVIDER_PATHS"            androID:resource="@xml/provIDer_paths"/>    </provIDer>

provIDer_paths.xml

<?xml version="1.0" enCoding="utf-8"?><paths xmlns:androID="http://schemas.androID.com/apk/res/androID"> <external-path name="external_files" path="."/></paths>

DrawVIEw中生成的路径

public static boolean save(Bitmap bitmap){    Date Now = new Date();    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy'_'HH:mm");    file folder = new file(Environment.getExternalStorageDirectory() +            file.separator + "Crash");    if (!folder.exists()) {        folder.mkdirs();    }    fileOutputStream fos = null;    try {        lastimagePath = new file(Environment.getExternalStorageDirectory().toString() + "/Crash/" + simpleDateFormat.format(Now) + ".jpg");        fos = new fileOutputStream(lastimagePath);        bitmap.compress(Bitmap.CompressFormat.JPEG,100,fos);        fos.flush();        fos.close();        fos = null;        return true;    } catch (IOException e) {        e.printstacktrace();        return false;    }    finally {        if (fos != null) {            try {                fos.close();            } catch (IOException e) {}        }    }}

打开图像侦听器

private class OpenImageListener implements VIEw.OnClickListener{    @OverrIDe    public voID onClick(VIEw v) {        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.N){            Intent intent = new Intent();            intent.setAction(Intent.ACTION_VIEW);            intent.setDataAndType(Uri.parse("file://" + DrawVIEw.getLastimagePath().getabsolutePath()),"image/*");            startActivity(intent);        } else {            Intent intent = new Intent();            intent.setAction(Intent.ACTION_VIEW);            Uri photoUri = fileProvIDer.getUriForfile(MainActivity.this,BuildConfig.APPliCATION_ID + ".provIDer",DrawVIEw.getLastimagePath());            intent.setData(photoUri);            startActivity(intent);        }    }}

也许我为图像生成了一条错误的路径,但是旧的版本它可以工作(我在Marshmallow上试过并且效果很好).

有人能帮我吗?谢谢.

解决方法 在onClick()的else块中,在Intent上调用setData()来设置Uri之后,在Intent上调用addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION).

目前,其他应用程序无权使用Uri标识的内容.添加FLAG_GRANT_READ_URI_PERMISSION可以做到这一点.

这在the FileProvider documentation中有所介绍,还有关于AndroID应用程序开发的现代书籍.

总结

以上是内存溢出为你收集整理的使用Android Nougat在图库中打开图片全部内容,希望文章能够帮你解决使用Android Nougat在图库中打开图片所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1130601.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存