android图片文件的路径地址与Uri的相互转换

一个android文件的Uri地址一般如下:

content://media/external/images/media/62026

这是一张图片的Uri,那么我们如何根据这个Uri获得其在文件系统中的路径呢?

其实很简单,直接上代码:

/**
 * Try to return the absolute file path from the given Uri
 *
 * @param context
 * @param uri
 * @return the file path or null
 */
public static String getRealFilePath( final Context context, final Uri uri ) {
    if ( null == uri ) return null;
    final String scheme = uri.getScheme();
    String data = null;
    if ( scheme == null )
        data = uri.getPath();
    else if ( ContentResolver.SCHEME_FILE.equals( scheme ) ) {
        data = uri.getPath();
    } else if ( ContentResolver.SCHEME_CONTENT.equals( scheme ) ) {
        Cursor cursor = context.getContentResolver().query( uri, new String[] { ImageColumns.DATA }, null, null, null );
        if ( null != cursor ) {
            if ( cursor.moveToFirst() ) {
                int index = cursor.getColumnIndex( ImageColumns.DATA );
                if ( index > -1 ) {
                    data = cursor.getString( index );
                }
            }
            cursor.close();
        }
    }
    return data;
}

那么假如我们有一个图片的路径地址又该如何获得其Uri呢?

    String type = Utils.ensureNotNull(intent.getType());
                Log.d(TAG, "uri is " + uri);
                if (uri.getScheme().equals("file") && (type.contains("image/"))) {
                    String path = uri.getEncodedPath();
                    Log.d(TAG, "path1 is " + path);
                    if (path != null) {
                        path = Uri.decode(path);
                        Log.d(TAG, "path2 is " + path);
                        ContentResolver cr = this.getContentResolver();
                        StringBuffer buff = new StringBuffer();
                        buff.append("(")
                                .append(Images.ImageColumns.DATA)
                                .append("=")
                                .append("‘" + path + "‘")
                                .append(")");
                        Cursor cur = cr.query(
                                Images.Media.EXTERNAL_CONTENT_URI,
                                new String[] { Images.ImageColumns._ID },
                                buff.toString(), null, null);
                        int index = 0;
                        for (cur.moveToFirst(); !cur.isAfterLast(); cur
                                .moveToNext()) {
                            index = cur.getColumnIndex(Images.ImageColumns._ID);
                            // set _id value
                            index = cur.getInt(index);
                        }
                        if (index == 0) {
                            //do nothing
                        } else {
                            Uri uri_temp = Uri
                                    .parse("content://media/external/images/media/"
                                            + index);
                            Log.d(TAG, "uri_temp is " + uri_temp);
                            if (uri_temp != null) {
                                uri = uri_temp;
                            }
                        }
                    }
                }
                   
时间: 2024-10-12 23:50:45

android图片文件的路径地址与Uri的相互转换的相关文章

Android图片文件上传实例

原文:Android图片文件上传实例 源代码下载地址:http://www.zuidaima.com/share/1550463718132736.htm 支持拍照图片上传和从手机相册中获取图片上传到服务器端的功能 源码截图

Spring MVC程序中得到静态资源文件css,js,图片文件的路径问题总结

上一篇 | 下一篇 Spring MVC程序中得到静态资源文件css,js,图片 文件的路径 用 Spring MVC 开发应用程序,对于初学者有一个很头疼的问题,那就是程序数据都已经查询出来了,但界面样式仍然十分丑陋,加载不了 css,js,图片等资源文件.当你在浏览器上直接输入某个css文件的路径时,直接得到404错误,而路径肯定没有错,其原因就在于在web.xml 中配置了类似如下的 spring servlet: 程序代码 <servlet>    <servlet-name&g

Android获取文件夹路径 /data/data/

首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己的应用的内部存储路径下.所有内部存储中保存的文件在用户卸载应用的时候会被删除. 一. files1. Context.getFilesDir(),该方法返回/data/data/youPackageName/files的File对象.2. Context.openFileInput()与Context.openFileOutput(),只能读取和写入files下的文件,返回的是FileInput

android 当文件夹路径从n层按back键退回到n-19层的时候,file manager自动退出

当文件夹路径从n层按back键退回到n-19层的时候,file manager自动退出,比如在63层按back 键退回到44层的时候,file manager自动退出. 1.FileManager默认设计, FileManager种只记录最多20条操作路径的记录, 如果超出就会把最早加入的记录删除. 贵司可以参考alps/mediatek/packages/apps/FileManager/src/com/mediatek/filemanager/FileInfoManager.java中这部分

Android Bluetooth 文件接收路径修改方法

修改文件: packages/apps/Bluetooth/src/com/android/bluetooth/opp/BluetoothOppReceiveFileInfo.java 相关代码片段: public static BluetoothOppReceiveFileInfo generateFileInfo(Context context, int id) { ContentResolver contentResolver = context.getContentResolver();

Spring MVC程序中怎么得到静态资源文件css,js,图片文件的路径问题

问题描述 在用springmvc开发应用程序的时候.对于像我一样的初学者,而且还是自学的人,有一个很头疼的问题.那就是数据都已经查出来了,但是页面的样式仍然十分简陋,加载不了css.js,图片等资源文件,如果你输入某个css的文件在浏览器中得到的直接是404错误(例如http://localhost:8080/iMax_view/css/classify.css),表示路径肯定没有错,这是因为你在web.xml中配置的springservlet ]<!-- springmvc前端控制器,rest

显示所选择文件的路径地址

private void simpleButtonSelectPath_Click(object sender, EventArgs e) { FolderBrowserDialog fbd = new FolderBrowserDialog(); fbd.SelectedPath = "D:"; //默认路径 if (fbd.ShowDialog() == DialogResult.OK) { textEditVoiceFilePath.Text = fbd.SelectedPath

javaweb工程,Servlet里面获取当前WEB跟路径的文件绝对路径地址

String base_Url = request.getSession().getServletContext().getRealPath("/"); String windows_path = "js\\weixin\\wxMenuTemplate.json"; String linux_path = "js/weixin/wxMenuTemplate.json"; String osName = System.getProperties()

读写图片文件源码

package com.cqhope.read; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; /** * 操作图片文件类. * @author yanghaita