700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android 选择文件(调用系统文件管理器)

Android 选择文件(调用系统文件管理器)

时间:2019-03-01 14:25:46

相关推荐

Android 选择文件(调用系统文件管理器)

.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 .Uri;import android.os.Build;import android.os.Environment;import android.provider.DocumentsContract;import android.provider.MediaStore;import android.widget.Toast;/*** CreateTime /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());}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。