android跳转到相册需要权限,Android打开相册获取图片路径[通俗易懂]

android跳转到相册需要权限,Android打开相册获取图片路径[通俗易懂]一.获得图片路径当我们通过Intent打开相册,获取图片后,在onActivityResult回调中会得到图片的Uri。但是Uri无法直接获得图片的路径。如果你曾经直接操作过android里的数据库的话,应该明白,Uri可以通过ContentResolver获得数据库表里的数据。例如:content://com.android.providers.media.documents/document/…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一.获得图片路径

当我们通过Intent打开相册,获取图片后,在onActivityResult回调中会得到图片的Uri。

但是Uri无法直接获得图片的路径。如果你曾经直接操作过android里的数据库的话,应该明白,Uri可以通过ContentResolver获得数据库表里的数据。

例如:

content://com.android.providers.media.documents/document/image:38

content:// 代表scheme

com.android.providers.media.documents 代表authority

document/image:38 代表path

由于打开图片获取的Uri会有不同的类型,所以需要通过不同的方法获取

private String getImagePath(Uri uri, String selection) {

String path = null;

Cursor cursor = getContentResolver().query(uri, null, selection, null, null);

if (cursor != null) {

if (cursor.moveToFirst()) {

path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));

}

cursor.close();

}

return path;

}

private String Uri2Path(Uri uri) {

String imagePath = null;

if (DocumentsContract.isDocumentUri(this, uri)) {

String docId = DocumentsContract.getDocumentId(uri);

if (“com.android.providers.media.documents”.equals(uri.getAuthority())) {

//Log.d(TAG, uri.toString());

String id = docId.split(“:”)[1];

String selection = MediaStore.Images.Media._ID + “=” + id;

imagePath = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection);

} else if (“com.android.providers.downloads.documents”.equals(uri.getAuthority())) {

//Log.d(TAG, uri.toString());

Uri contentUri = ContentUris.withAppendedId(

Uri.parse(“content://downloads/public_downloads”),

Long.valueOf(docId));

imagePath = getImagePath(contentUri, null);

}

} else if (“content”.equalsIgnoreCase(uri.getScheme())) {

//Log.d(TAG, “content: ” + uri.toString());

imagePath = getImagePath(uri, null);

}

return imagePath;

}

二.运行时权限获取

由于需要进行文件的读取操作,所以需要获取相关权限。而在23及以上的手机上需要动态获取权限,所以只是进行上面的操作会显示错误。

首先我们需要在manifast清单中加入权限

android.permission.WRITE_EXTERNAL_STORAGE

当然,Read也是可以的,毕竟我们只是读取文件。

然后在java文件中,我们首先需要检测是否获得了权限,如果没有,再请求。

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){

int isPermitted=ContextCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE);

if (isPermitted!=PackageManager.PERMISSION_GRANTED){

ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);

}

}

然后在onRequestPermissionsResult中可以获得结果。

参考:

https://www.jianshu.com/p/f9a63fcc0b91

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190703.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • rsyslogd 重启_rsyslogd配置文件详解

    rsyslogd 重启_rsyslogd配置文件详解rsyslog服务和logrotate服务======================================================================rsyslog是一个syslogd的多线程增强版。现在Fedora和Ubuntu,rhel6默认的日志系统都是rsyslog了rsyslog负责写入日志,logrotate负责备份和删除旧日志,以及更新日志…

    2022年8月15日
    10
  • 浏览器编译代码_ie浏览器html编辑器

    浏览器编译代码_ie浏览器html编辑器20个最强的基于浏览器的在线代码编辑器1.CompilrCompilr是一个在线编译器和在线IDE。可以用它来开发PHP,C,C++,Ruby。在浏览器中编译Java,C#和VB.net等。马上使用2.Dabblet跨浏览器兼容,对前端攻城师们来说是一个不得不处理的问题。为了在浏览器间呈现统一的显示效果,攻城师们不仅要为每个游览器添加CSS前缀,甚至还…

    2022年8月14日
    4
  • linux(6)查看进程ps命令「建议收藏」

    linux(6)查看进程ps命令「建议收藏」ps命令Linuxps(英文全拼:processstatus)命令用于显示当前进程的状态,类似于windows的任务管理器查看所有进程ps-A显示所有进程信息,连同命令行ps-

    2022年7月28日
    4
  • django修改数据_java实现增删改查

    django修改数据_java实现增删改查前言在ORM框架中,所有模型相关的操作,比如添加/删除等。其实都是映射到数据库中一条数据的操作。因此模型操作也就是数据库表中数据的操作。添加一个模型到数据库中:添加模型到数据库中。首先需要创建一

    2022年7月29日
    7
  • 数据权限设计(转载)

    数据权限设计(转载)一、前言几乎在任何一个系统中,都离不开权限的设计,权限设计=功能权限+数据权限,而功能权限,在业界常常是基于RBAC(Role-BasedAccessControl)的一套方案。而数据权限,则根据不同的业务场景,则权限却不尽相同,应该根据具体的场景巧妙设计;且必须在项目开始时进行设计,不像功能权限一样,在项目结束的时候在追加。注:更细还可以加入字段权限1.1权限…

    2022年7月16日
    14
  • 基于灰度共生矩阵的纹理特征提取_灰度共生矩阵计算图解

    基于灰度共生矩阵的纹理特征提取_灰度共生矩阵计算图解最近在研究机器学习相关内容,后面会尽量花时间整理成一个系列的博客,然后朋友让我帮他实现一种基于SVR支持向量回归的图像质量评价方法,然而在文章的开头竟然发现灰度共生矩阵这个陌生的家伙,于是便有此文。主要参考博客1:http://blog.csdn.net/jialeheyeshu/article/details/51337225主要参考博客2:http://blog.csdn….

    2025年8月23日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号