2020.6.3更新:
说明下:Android 7.0以后要求配置fileprovider了,Android 10.0以后如果还没配置的话,选择文件基本就瘫了,网上很多配置资料,这里就不演示了哈,告知各位注意下这个
一、选择文件【系统文件管理器】

import android.annotation.SuppressLint;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
import android.widget.Toast;/*** CreateTime 2018/1/12 11:35* Author LiuShiHua* Description:选择文件返回** 调用方式如下*/
//选择文件【调用系统的文件管理】
//        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, REQUEST_CHOOSEFILE);//@Override
//protected void onActivityResult(int requestCode,int resultCode,Intent data){//选择文件返回
//        super.onActivityResult(requestCode,resultCode,data);
//        if(resultCode==RESULT_OK){
//        switch(requestCode){
//              case REQUEST_CHOOSEFILE:
//              Uri uri=data.getData();
//               chooseFilePath=FileChooseUtil.getInstance(this).getChooseFileResultPath(uri);
//              Log.d(TAG,"选择文件返回:"+chooseFilePath);
//              sendFileMessage(chooseFilePath);
//               break;
//        }
//    }
//}public class FileChooseUtil {private Context context;private static FileChooseUtil util = null;private FileChooseUtil(Context context) {this.context = context;}public static FileChooseUtil getInstance(Context context) {if (util == null) {util = new FileChooseUtil(context);}return util;}/*** 对外接口  获取uri对应的路径** @param uri* @return*/public String getChooseFileResultPath(Uri uri) {String chooseFilePath = null;if ("file".equalsIgnoreCase(uri.getScheme())) {//使用第三方应用打开chooseFilePath = uri.getPath();Toast.makeText(context, chooseFilePath, Toast.LENGTH_SHORT).show();return chooseFilePath;}if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {//4.4以后chooseFilePath = getPath(context, uri);} else {//4.4以下下系统调用方法chooseFilePath = getRealPathFromURI(uri);}return chooseFilePath;}private String getRealPathFromURI(Uri contentUri) {String res = null;String[] proj = {MediaStore.Images.Media.DATA};Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null);if (null != cursor && cursor.moveToFirst()) {int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);res = cursor.getString(column_index);cursor.close();}return res;}/*** 专为Android4.4设计的从Uri获取文件绝对路径,以前的方法已不好使*/@SuppressLint("NewApi")private String getPath(final Context context, final Uri uri) {final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;// DocumentProviderif (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {// ExternalStorageProviderif (isExternalStorageDocument(uri)) {final String docId = DocumentsContract.getDocumentId(uri);final String[] split = docId.split(":");final String type = split[0];if ("primary".equalsIgnoreCase(type)) {return Environment.getExternalStorageDirectory() + "/" + split[1];}}// DownloadsProviderelse if (isDownloadsDocument(uri)) {final String id = DocumentsContract.getDocumentId(uri);final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));return getDataColumn(context, contentUri, null, null);}// MediaProviderelse if (isMediaDocument(uri)) {final String docId = DocumentsContract.getDocumentId(uri);final String[] split = docId.split(":");final 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;}final String selection = "_id=?";final String[] selectionArgs = new String[]{split[1]};return getDataColumn(context, contentUri, selection, selectionArgs);}}// MediaStore (and general)else if ("content".equalsIgnoreCase(uri.getScheme())) {return getDataColumn(context, uri, null, null);}// Fileelse if ("file".equalsIgnoreCase(uri.getScheme())) {uri.getPath();}return null;}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;}/*** @param uri The Uri to check.* @return Whether the Uri authority is ExternalStorageProvider.*/private boolean isExternalStorageDocument(Uri uri) {return "com.android.externalstorage.documents".equals(uri.getAuthority());}/*** @param uri The Uri to check.* @return Whether the Uri authority is DownloadsProvider.*/private boolean isDownloadsDocument(Uri uri) {return "com.android.providers.downloads.documents".equals(uri.getAuthority());}/*** @param uri The Uri to check.* @return Whether the Uri authority is MediaProvider.*/private boolean isMediaDocument(Uri uri) {return "com.android.providers.media.documents".equals(uri.getAuthority());}
}

Android 选择文件(调用系统文件管理器)相关推荐

  1. android调用文件管理打开某个路径,安卓 通过intent调用系统文件管理器打开指定路径目录...

    当我们知道一个文件的路径,如何调用系统文件管理器显示它的位置呢. 代码: private void openAssignFolder(String path){ File file = new Fil ...

  2. android 调用系统文件管理器

    今天,简单讲讲android如何调用系统的文件管理器获取目录下的文件资源. 这几天,还是因为搬家的事,导致自己状态很差.和领导说想要辞职,领导说还是先适应一下在说.所以还是坚持了. 这个其实也很简单, ...

  3. 安卓 通过intent调用系统文件管理器打开指定路径目录

    安卓 通过intent调用系统文件管理器打开指定路径目录   转  https://blog.csdn.net/qq_34161388/article/details/78586247 当我们知道一个 ...

  4. Qt Android 调用系统文件管理

    1.了解 使用JNI扩展Qt应用 参考<Qt on Android核心编程>15章 源码https://download.csdn.net/download/dinosaurx/10149 ...

  5. android调用系统下载器下载文件

    在项目中使用到了在android端下载服务端的文件,之前使用的是http下载方式,现在想改成调用系统的下载器进行下载,实现步骤为: 1.得到url:文件下载地址 2.使用URL下载: (1)下载前先判 ...

  6. android 根据指定路径获取本地视频列表显示,点击缩略图调用系统播放器进行播放

    第一步,MainActivity.class类代码 如下: package com.learn.lister.systemvediorecord;import android.app.Activity ...

  7. android 调用系统播放器

    今天,简单讲讲android如何调用手机自带的播放器. 昨天,从服务器下载一个AVI的视频,下载后需要进行播放,所以想调用系统自带的播放器.但是由于很少用到,所以自己当时不知道怎么写,于是在网上查找资 ...

  8. android文件管理器u盘,Android U盘文件显示在文件管理器

    在做物联网客户需求时,有客户要求实现u盘中的文件在文件管理器中显示,便于客户管理. 查看代码后,发现u盘是基于usb-otg挂载的,只要实现usb-otg文件显示在文件管理器中即可. android ...

  9. Android调用uc播放器,android 视频播放 -- 调用系统播放器

    android 视频播放,视频来源有两种:一种是本地视频,一种是网络视频,对android播放来说都统一用uri来表示. 播放视频有三种处理方式: (1) 使用webview 播放 (2) 使用vid ...

  10. android 视频播放 -- 调用系统播放器

    android 视频播放,视频来源有两种:一种是本地视频,一种是网络视频,对android播放来说都统一用uri来表示. 播放视频有三种处理方式: (1) 使用webview 播放 (2) 使用vid ...

最新文章

  1. webSocket浏览器握手不成功(解决)
  2. TiP:湖大于峰组综述​病原体分泌的宿主模拟物在植物病害发展中的新作用!...
  3. spring配置文件中非bean标签的原理解析
  4. 微服务之迷思--转几位大牛的文章
  5. 两个向量之间的夹角公式_向量的内积
  6. Java JSR303 valid
  7. 20200606:最长连续序列(leetcode128)
  8. Google Drive 被曝0day,可诱骗用户安装恶意软件
  9. Stable Region Correspondences Between Non-Isometric Shapes
  10. opencv人脸关键点生成掩膜并替换
  11. 代理池篇(一)获取66免费代理网+西刺代理
  12. Android安全防护之旅---只需要这几行代码让Android程序项目变得更加安全
  13. 服务器文档分类,服务器的分类
  14. c语言调试过程中的错误,C语言调试过程中duplicate symbol错误分析
  15. js实现拼接一个以逗号隔开的字符串
  16. Qt扫盲-QSlider理论总结
  17. 深入剖析NVMe Over Fabrics
  18. 5图片展示_作为一名跨境卖家,产品图片不这样拍还怎么靠“脸”吃饭?
  19. C语言常用格式化符号
  20. 安全信息管理系统(OSSIM)

热门文章

  1. 数学建模overleaf模板_数学建模论文怎么写?快来pick最优万能模板,一文格式全搞定!...
  2. 江苏省计算机二级cpp试题,2017年计算机二级C++考试试题
  3. Java - ip2region - 使用篇
  4. Mysql的一揽子方案用法
  5. R语言——相关系数图
  6. 直击灵魂:软件研发的第一性原理与10倍效能
  7. 中国网络游戏中的反外挂模式
  8. ASP使用ASPupload组件上传多个文件
  9. 计算机组成原理补码位算法,[计算机组成原理] Booth算法 —— 补码一位乘法
  10. php论文中期进展情况,我院开展2017年本、硕毕业创作/设计及毕业论文中期检查工作...