文档章节

Android 本地文件选择

whitemine
 whitemine
发布于 2017/07/11 15:20
字数 248
阅读 41
收藏 0

打开系统文件:

 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("*/*");
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                try {
                    startActivityForResult(Intent.createChooser(intent, getString(R.string.im_text_select_file)), SEND_NORMAL_FILE);
                } catch (android.content.ActivityNotFoundException ex) {
                    BAUtil.showToast(this, "未找到文件管理应用,请安装文件管理应用后再试");
                }

回调方法:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case SEND_NORMAL_FILE: 
                try {
                    String path = "";
                    if (Build.VERSION.SDK_INT >= 19) {
                        path = handleImageOnKitKat(context, data);
                    } else {
                        path = handleImageBeforeKitKat(context, data);
                    }
                    doSendNormalFile(path, BAAttach.TYPE_FILE);
                } catch (Exception e) {
                    e.printStackTrace();
                }
               break;
}
}
@TargetApi(Build.VERSION_CODES.KITKAT)
    public static String handleImageOnKitKat(Context context, Intent data) {
        Uri uri = data.getData();
        if (DocumentsContract.isDocumentUri(context, uri)) {
            String docId = DocumentsContract.getDocumentId(uri);
            if ("com.android.providers.media.documents".equals(uri.getAuthority())) {
                String id = docId.split(":")[1];
                String selection = MediaStore.Images.Media._ID + "=" + id;
                String type = docId.split(":")[0];
                Uri contentUri = null;
                if (type.equalsIgnoreCase("image")) {
                    contentUri =  MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                } else if (type.equalsIgnoreCase("audio")) {
                    contentUri =  MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
                } else if (type.equalsIgnoreCase("video")) {
                    contentUri =  MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                }
                return getImagePath(context, contentUri, selection);
            } else if ("com.android.providers.media.downloads.documents".equals(uri.getAuthority())) {
                Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),
                        Long.valueOf(docId));
                return getImagePath(context, contentUri, null);
            } else if ("content".equals(uri.getAuthority())) {
                return getImagePath(context, uri, null);
            } else if ("file".equals(uri.getAuthority())) {
                return uri.getPath();
            }
        }
        return "";
    }

    public static String handleImageBeforeKitKat(Context context, Intent data) {
        Uri uri = data.getData();
        return getImagePath(context, uri, null);
    }

    private static String getImagePath(Context context, Uri uri, String selection) {
        String path = null;
        Cursor cursor = context.getContentResolver().query(uri, null, selection, null, null);
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
            }
            cursor.close();
        }
        return path;
    }

 

© 著作权归作者所有

共有 人打赏支持
whitemine
粉丝 0
博文 18
码字总数 3731
作品 0
南京
Windows下使用批处理创建cocos2d-x的android工程

在cocos2d-x根目录下找到create-android-project.bat批处理文件,一会儿我们要使用这个批处理文件来创建android工程。 使用之前要对create-android-project.bat做一下小小的修改,配置一下路...

扶殊88
2013/04/28
0
0
Windows环境下Android Studio系列2—初次运行

参考资料 [1] Windows环境下Android Studio v1.0安装教程, http://ask.android-studio.org/?/article/9 [2] stormZhang的Android Studio系列教程一--下载与安装, http://stormzhang.com/dev......

一配
2015/06/17
0
0
[原创] Android SDK 安装全记录

[原创] Android SDK 安装全记录 1. JDK jdk-se-7u3 http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载安装 2. Android SDK http://developer.android.com/sdk 下载安......

scaredme
2012/03/28
0
1
浅入浅出 Android 安全:第一章 Android

第一章 Android 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 Android 安全架构的理解不仅帮助我了解 Android 的工作原理,而且为我开启了如何构建移动操作系...

apachecn_飞龙
2016/11/27
0
0
ADT+Android-m2e环境搭建(Mac OS)

环境要求 JDK1.6+ Maven 3.1.1+ Eclipse Indigo(3.7)、Juno(4.2)以上版本 虽然m2e-android官方推荐Eclipse使用Indigo和Juno以上版本,但本文是基于Kepler(4.3)来分享安装过程的。并整理了Jun...

Madmatrix
2014/07/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

shell学习之创建函数

函数是一个脚本代码块,你可以为其命名并在代码中任何位置重用。 在bash shell脚本中创建函数基本使用如下两种方式,第二种格式更接近于其他编程语言中定义函数的方式。 function name {com...

woshixin
17分钟前
1
0
Toolfk.com 程序员工具网上线

#前言 真不容易,用了一个月的业余时间才把这个网站(toolfk.com)做完。里面的内容主要是从github上找的开源码码,在线运行使用的是Docker运行。当然也是现成的。因为我现在对Docker还是不懂。...

hihubs
30分钟前
2
0
svn 常用操作命令及问题处理

1. 常用命令 1.1. 基本使用 检出 checkout ➜ svn co repo_url -m '检出代码'➜ svn co repo_url saved_dir_name -m '检出代码,并指定目录名' 加入版本控制 add # 添加指定文件➜ svn...

whoru
57分钟前
3
0
记一次jquery validate的扩展(第一次失去焦点时触发校验)

最近在用jquery.validate 做前端表单校验,但是发现每次第一次失去焦点时,如果文本框内容为空,且该字段是必填项, 则不会触发校验,直到提交表单后,再次失去焦点时,才会触发,想对此进行...

foreach
今天
1
0
java生成UUID

UUID介绍: UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以...

编程SHA
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部