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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 行为识别综述

    行为识别综述定义背景难点最新论文最新算法数据集1定义行为识别:行为识别(ActionRecognition)任务是从视频剪辑(2D帧序列)中识别不同的动作,其中动作可以在视频的整个持续时间内执行或不执行。行为识别似乎是图像分类任务到多个帧的扩展,然后聚合来自每帧的预测。尽管图像分类取得了很大的成功,但是视频分类和表示学习依然进展缓慢。2背景2.1方法2.1.1传统方法提取视频区域的局部高维视觉特征,然后组合成固定大小的视频级描述,最后利用分类器(SVM,RF等)进行最终预测2.

  • java先序中序后序遍历二叉树_二叉树的前序中序后续

    java先序中序后序遍历二叉树_二叉树的前序中序后续1.前序遍历    前序遍历(DLR,lchild,data,rchild),是二叉树遍历的一种,也叫做先根遍历、先序遍历、前序周游,可记做根左右。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。若二叉树为空则结束返回,否则:(1)访问根结点。(2)前序遍历左子树。(3…

  • spring starter(怎么编写自己的starter)

    微服务架构从本质上说其实就是分布式架构,与其说是一种新架构,不如说是一种微服务架构风格。简单来说,微服务架构风格是要开发一种由多个小服务组成的应用。每个服务运行于独立的进程,并且采用轻量级交互。多数情况下是一个HTTP的资源API。这些服务具备独立业务能力并可以通过自动化部署方式独立部署。这种风格使最小化集中管理,从而可以使用多种不同的编程语言和数据存储技术。对于微服务架构系统,由于其服务粒度…

  • PAT乙级考试经验分享

    PAT乙级考试经验分享主要介绍了PAT乙级考试从报名到准备到考试中的小技巧等相关经验

  • 中国蚁剑安装教程_剑形虹臭蚁的天敌

    中国蚁剑安装教程_剑形虹臭蚁的天敌中国蚁剑:https://www.freebuf.com/sectool/98681.htmlgithub地址:https://github.com/AntSwordProject我下载好的(这里的版本太旧了,去github下载吧):https://www.lanzous.com/b548184/密码:cbek教程:两个全部解压好(一个是源码,一个是启动文件)先…

    2022年10月21日
  • Visio2007产品密钥

    Visio2007产品密钥注意:以下是一个产品密钥,全部粘贴,不是6选一W2JJW-4KYDP-2YMKW-FX36H-QYVD8QGRC3-KQF42-GXR8T-MJQJ7-76938H22HP-9PGYQ-FKHQ9-KYH6K-JPJ7WVMRGQ-G3YMP-RWYH2-4TQ97-CT2HDV9MTG-3GX8P-D3Y4R-68BQ8-4Q8VDW2JJW-4KYDP-2YMKW-FX36H-QYVD8…

发表回复

您的电子邮箱地址不会被公开。

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