一、打开系统自带的文件管理器

       if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {            showToast(R.string.msg_storage_nosdcard);            return;        }        //获取文件下载路径        String compName = AppString.getCompanyName();        String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + compName + "/OSC_DATA/";        File dir = new File(path);        if (!dir.exists()) {            dir.mkdirs();        }        //调用系统文件管理器打开指定路径目录        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);        intent.setDataAndType(Uri.fromFile(dir.getParentFile()), "file/*.txt");        intent.addCategory(Intent.CATEGORY_OPENABLE);        startActivityForResult(intent, REQUEST_CHOOSEFILE);
@Overrideprotected 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;        }    }}

二、工具类FileChooseUtil

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;        // DocumentProvider        if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {            // ExternalStorageProvider            if (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];                }            }            // DownloadsProvider            else 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);            }            // MediaProvider            else 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);        }        // File        else 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());    }}

完!!!

更多相关文章

  1. Android Studio Gradle 缓存文件夹设置
  2. Android内核驱动开发中的Kconfig文件结构分析(图文)
  3. Android震动和播放资源文件中的声音文件
  4. Android文件管理器开发对各类文件的打开以及处理
  5. xml文件
  6. android sdcard存储方案(基于fuse文件系统):之一
  7. android读取data/data/包名/file路径下的txt文件

随机推荐

  1. Android(安卓)Spinner与适配器模式详解及
  2. Android温故之-BroadcastReceiver
  3. android实现横向滚动
  4. Android(安卓)的木马危机
  5. Android新手入门2016(2)--Mac下的Android开
  6. 【Android】在不同的线程池中执行AsyncTa
  7. 用c#开发安卓程序 (xamarin.android)系列
  8. [置顶] [Android(安卓)Studio 权威教程]Win
  9. 【30篇突击 android】源码统计 十九
  10. eclipse 上调试android的自带应用方法