Android 调用文件管理器 Uri 转文件路径

原创 2018年04月16日 13:17:11

private void openFileExplorer() {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    //intent.setType(“image/*”);//选择图片
    //intent.setType(“audio/*”); //选择音频
    //intent.setType(“video/*”); //选择视频 (mp4 3gp 是android支持的视频格式)
    //intent.setType(“video/*;image/*”);//同时选择视频和图片
    intent.setType("*/*");//无类型限制
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    startActivityForResult(intent, 1);
}

private String uriToString(Uri uri) {
    String path = null;
    if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
        if (DocumentsContract.isDocumentUri(this, uri)) {
            // ExternalStorageProvider
            if ("com.android.externalstorage.documents".equals(uri.getAuthority())) {
                String docId = DocumentsContract.getDocumentId(uri);
                String[] split = docId.split(":");
                String type = split[0];
                if ("primary".equalsIgnoreCase(type)) {
                    path = Environment.getExternalStorageDirectory() + "/" + split[1];
                }
            } else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())) {
                // DownloadsProvider
                String id = DocumentsContract.getDocumentId(uri);
                Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
                path = getDataColumn(this, contentUri, null, null);
            } else if ("com.android.providers.media.documents".equals(uri.getAuthority())) {
                // MediaProvider
                String docId = DocumentsContract.getDocumentId(uri);
                String[] split = docId.split(":");
                String type = split[0];
                Uri contentUri = null;
                if ("image".equals(type)) {
                    contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                } else if ("video".equals(type)) {
                    contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                } else if ("audio".equals(type)) {
                    contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
                }
                String selection = "_id=?";
                String[] selectionArgs = new String[]{split[1]};
                path = getDataColumn(this, contentUri, selection, selectionArgs);
            }
        } else {
            path = getRealPathFromUri(this, uri);
        }
    }
    return path;
}

private String getRealPathFromUri(Context context, Uri contentUri) {
    Cursor cursor = null;
    try {
        String[] proj = {MediaStore.Files.FileColumns.DATA};
        cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
}

private String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
    Cursor cursor = null;
    final String column = "_data";
    final String[] projection = {column};
    try {
        cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
        if (cursor != null && cursor.moveToFirst()) {
            final int column_index = cursor.getColumnIndexOrThrow(column);
            return cursor.getString(column_index);
        }
    } finally {
        if (cursor != null)
            cursor.close();
    }
    return null;
}





版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011704663/article/details/79959292

百度webuploader上传文件组件案例分析和使用-web网站开发3

会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。百度webuploader上传文件组件案例分析和使用是子恒老师《web网站开发》视频教程的第3部。详细讲解了用php结合百度webuploader的开发。内容包含webuploader脚本分析,过滤文件类型,多线程上传,分片上传文件等等。欢迎反馈,微信号:QQ68183131
  • 2017年04月07日 15:39

android调用系统文件浏览器获得uri或者文件路径

基本思路: 1.使用隐式intent和startActivityforResult开启系统文件浏览器。 2.使用onAcitivityRsult方法接受返回的 intent,取出其中包含的uri(...
  • WALLEZhe
  • WALLEZhe
  • 2016-06-08 18:53:17
  • 2454

ANDROID中调用文件管理器并返回选中文件的路径

源地址:http://www.cnblogs.com/panhouye/archive/2017/04/23/6751710.html ANDROID中调用文件管理器并返回选中文件的路径 ...
  • q925092273
  • q925092273
  • 2017-07-10 19:08:58
  • 1170

Android把res/raw的资源转化为Uri形式访问(android.resource://)

 如何访问平时APK文件Res目录下的内容呢? 如果直接访问Apk下的assets目录可以使用AssetManager类处理,而需要访问res/raw这样的文件夹怎么办呢?   APK...
  • gpf1320253667
  • gpf1320253667
  • 2015-10-28 15:59:55
  • 409

如何将资源文件夹raw里的文件路径转化成uri

在android编程时,常有一些视频或者音频等文件要放在资源文件夹raw里,在引用他们的时候,往往需要他们的uri。 那么如何将资源文件raw文件夹里的文件路径转化成uri呢? 用下面的代码就搞定了:...
  • woshiwangbiao
  • woshiwangbiao
  • 2016-08-26 13:52:46
  • 3667

Android7.0 自定义文件管理器 获取文件夹路径

  • 2017年03月13日 09:42
  • 19.34MB
  • 下载

Android--Uri转实际路径详解

通过Uri得到实际路径,网上方法有很多,但我前几天试了一下,发现返回的值都是null,后来才发现,Uri的格式在Android4.4之后有了很大的改动。 比如:content://media/exte...
  • u013160228
  • u013160228
  • 2015-07-27 16:05:45
  • 2683

android Uri利用及解析(文件操作)以及与路径的相互转换

关于路径的填写要求请移步。。。。。。 关于路径的操作请移步。。。。。。。。 Uri:通用资源标志符,标志确定一个互联网资源,通过它可以找到我们想要的资源,它有一定的格式。 android Uri:也...
  • sinat_32955803
  • sinat_32955803
  • 2016-04-28 12:24:58
  • 1485

android 获取uri的正确文件路径的办法

有时会从其他的文件浏览器获取路径,这时根据路径去数据库取文件时会发现不成功,原因是由于android的文件浏览器太多,各自返回的路径不统一,而android本身的数据库中的路径是绝对路径,即"/mnt...
  • fzh0803
  • fzh0803
  • 2012-05-24 21:37:17
  • 31815

Android7.0 Intent打开文件管理器 获取文件真实路径

  • 2017年02月17日 11:49
  • 23.79MB
  • 下载
收藏助手
不良信息举报
您举报文章:Android 调用文件管理器 Uri 转文件路径
举报原因:
原因补充:

(最多只允许输入30个字)