Android根据图片Uri获取图片绝对路径

2024-05-15 23:32

本文主要是介绍Android根据图片Uri获取图片绝对路径,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自: http://www.jianshu.com/p/b168cbe50066

选择文件时,通常会使用如下方法,以图片为例:

// 进入选择图片的界面
private void selectImage(){Intent intent = new Intent(Intent.ACTION_GET_CONTENT);intent.setType("image/*");startActivityForResult(intent, YOUR_CHOOSE_IMAGE_REQUEST_CODE);
}
// 在onActivityResult()回调方法中进行数据获取
protected void onActivityResult(int requestCode, int resultCode, Intent data) {// ... 进行一些判断处理Uri uri = data.getData();// ... 接下来进行图片显示
}

在不同的版本中,返回的uri类型是不一样的,需要针对不同类型的uri做处理,来获取文件的真实路径.

/*** 根据Uri获取图片的绝对路径** @param context 上下文对象* @param uri     图片的Uri* @return 如果Uri对应的图片存在, 那么返回该图片的绝对路径, 否则返回null*/public static String getRealPathFromUri(Context context, Uri uri) {int sdkVersion = Build.VERSION.SDK_INT;if (sdkVersion >= 19) { // api >= 19return getRealPathFromUriAboveApi19(context, uri);} else { // api < 19return getRealPathFromUriBelowAPI19(context, uri);}}/*** 适配api19以下(不包括api19),根据uri获取图片的绝对路径** @param context 上下文对象* @param uri     图片的Uri* @return 如果Uri对应的图片存在, 那么返回该图片的绝对路径, 否则返回null*/private static String getRealPathFromUriBelowAPI19(Context context, Uri uri) {return getDataColumn(context, uri, null, null);}/*** 适配api19及以上,根据uri获取图片的绝对路径** @param context 上下文对象* @param uri     图片的Uri* @return 如果Uri对应的图片存在, 那么返回该图片的绝对路径, 否则返回null*/@SuppressLint("NewApi")private static String getRealPathFromUriAboveApi19(Context context, Uri uri) {String filePath = null;if (DocumentsContract.isDocumentUri(context, uri)) {// 如果是document类型的 uri, 则通过document id来进行处理String documentId = DocumentsContract.getDocumentId(uri);if (isMediaDocument(uri)) { // MediaProvider// 使用':'分割String id = documentId.split(":")[1];String selection = MediaStore.Images.Media._ID + "=?";String[] selectionArgs = {id};filePath = getDataColumn(context, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection, selectionArgs);} else if (isDownloadsDocument(uri)) { // DownloadsProviderUri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(documentId));filePath = getDataColumn(context, contentUri, null, null);}} else if ("content".equalsIgnoreCase(uri.getScheme())){// 如果是 content 类型的 UrifilePath = getDataColumn(context, uri, null, null);} else if ("file".equals(uri.getScheme())) {// 如果是 file 类型的 Uri,直接获取图片对应的路径filePath = uri.getPath();}return filePath;}/*** 获取数据库表中的 _data 列,即返回Uri对应的文件路径* @return*/private static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {String path = null;String[] projection = new String[]{MediaStore.Images.Media.DATA};Cursor cursor = null;try {cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);if (cursor != null && cursor.moveToFirst()) {int columnIndex = cursor.getColumnIndexOrThrow(projection[0]);path = cursor.getString(columnIndex);}} catch (Exception e) {if (cursor != null) {cursor.close();}}return path;}/*** @param uri the Uri to check* @return Whether the Uri authority is MediaProvider*/private static boolean isMediaDocument(Uri uri) {return "com.android.providers.media.documents".equals(uri.getAuthority());}/*** @param uri the Uri to check* @return Whether the Uri authority is DownloadsProvider*/private static boolean isDownloadsDocument(Uri uri) {return  "com.android.providers.downloads.documents".equals(uri.getAuthority());}

这篇关于Android根据图片Uri获取图片绝对路径的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/993226

相关文章

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

通过cmd获取网卡速率的代码

《通过cmd获取网卡速率的代码》今天从群里看到通过bat获取网卡速率两段代码,感觉还不错,学习bat的朋友可以参考一下... 1、本机有线网卡支持的最高速度:%v%@echo off & setlocal enabledelayedexpansionecho 代码开始echo 65001编码获取: >

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

Java实现图片淡入淡出效果

《Java实现图片淡入淡出效果》在现代图形用户界面和游戏开发中,**图片淡入淡出(FadeIn/Out)**是一种常见且实用的视觉过渡效果,它可以用于启动画面、场景切换、轮播图、提示框弹出等场景,通过... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细