职场小白迷上优美句子: 

推迟,拖延真的是件可怕的事,过去了好久还是原来的样子。

公司现在的项目中有一个需求,需要把本地 json 格式的数据导入到项目中使用,其实简单的逻辑就是:使用安卓隐式跳转的方式进入到文件管理器,然后寻找需要的文件,点击文件之后返回该文件的路径,之后根据路径获取到该文件并对其进行相应的操作。

这些代码不是自己在Android 官网上找的,也是从百度搜的,当然需要标明出处:

https://blog.csdn.net/xialong_927/article/details/81902793

1.进入文件管理器

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

2.返回结果

String path;    @Override    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (resultCode == Activity.RESULT_OK) {            Uri uri = data.getData();            if ("file".equalsIgnoreCase(uri.getScheme())){//使用第三方应用打开                path = uri.getPath();                mFilePathTv.setText(path);                Log.d("queryfilepath", "返回结果1: " + path);                return;            }            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {//4.4以后                path = FileChooseUtil.getPath(this, uri);                mFilePathTv.setText(path);                Log.d("queryfilepath", "返回结果2: " + path);            } else {//4.4以下下系统调用方法                path = FileChooseUtil.getRealPathFromURI(uri);                mFilePathTv.setText(path);                Log.d("queryfilepath", "返回结果3: " + path);            }        }    }

3.用到的工具类

public class FileChooseUtil {    private static 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;    }    public static 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")    public static 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 static 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 static 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 static 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 static boolean isMediaDocument(Uri uri) {        return "com.android.providers.media.documents".equals(uri.getAuthority());    }}

注意:记得开启手机的读写权限,不然会报权限拒绝异常:SecurityException ! !   !

更多相关文章

  1. Android(安卓)开启个人热点时 获取连接人数以及连接上的设备信息
  2. android拍照上传到服务器端
  3. 在Android中播放音频和视频
  4. 用DownLoadManage封装一个App的更新组件(兼容android 6、7、8)
  5. Android(安卓)So加载的路径选择以及注意选项
  6. 【Android】Android(安卓)Studio 查找工程中的无用资源文件和无
  7. 如何在Android的模拟器中的SD卡中添加文件
  8. Android如何正确的保存文件
  9. Android(安卓)酷炫来袭:制作属于你自己的音频播放器(综合运用Media

随机推荐

  1. MyCms 自媒体 CMS 系统 v3.2.2,广告插件优
  2. 分支与循环示例及php模板与html混编示例
  3. Python 模拟员工信息数据库操作的实例
  4. 访问器属性原理与应用场景,获取DOM元素的2
  5. 实例演示vue常用术语、样式与事件绑定、
  6. PHP实例演示分支与循环
  7. PHP基础 -(一)变量、函数、参数
  8. 分支与循环、php模板语法与html混编技巧
  9. PHP:1. 实例演示分支与循环 2. 实例演示ph
  10. Android(安卓)调用WCF实例详解