aFileChooser:兼容android2.1+的文件选择器

aFileChooser是一个简化文件浏览与选择过程的android项目。他主要是面向开发者,让任何人都能轻易实现自己的文件浏览器或者文件选择对话框。

intents使得第三方app在选择系统内容资源成为可能,但是如果你想要用户能根据自己的想法选择任意一个文件,你必须调用一个已经存在的文件浏览器,但是很多手机厂商并没有文件浏览器可用,因此很多应用的在遇到这个问题的时候往往是提示用户安装一个文件浏览器。aFileChooser的出现解决了这个问题,让我们可以构件自己的文件浏览器。

他有几个优点:

支持按分类选择;

兼容api 7以上;

界面美观;

可定制行强;

功能完善;

选择文件目录中的文件:

使用方法:

将aFileChooser的库文件导入项目。

FileChooserActivity写入到你的AndroidManifest.xml文件中:

<activity
    android:name="com.ipaulpro.afilechooser.FileChooserActivity"
    android:icon="@drawable/ic_chooser"
    android:enabled="@bool/use_activity"
    android:exported="true"
    android:label="@string/choose_file" >
    <intent-filter>
        <action android:name="android.intent.action.GET_CONTENT" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.OPENABLE" />
        <data android:mimeType="*/*" />
    </intent-filter>
</activity>

注意android:exported="true"是必须的。

下面演示如何调用这个activity并获得文件选择器的返回值:

private static final int REQUEST_CHOOSER = 1234;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Create the ACTION_GET_CONTENT Intent
    Intent getContentIntent = FileUtils.createGetContentIntent();
    Intent intent = Intent.createChooser(getContentIntent, "Select a file");
    startActivityForResult(intent, REQUEST_CHOOSER);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case REQUEST_CHOOSER:
            if (resultCode == RESULT_OK) {
                final Uri uri = data.getData();
                // Get the File path from the Uri
                String path = FileUtils.getPath(this, uri);
                // Alternatively, use FileUtils.getFile(Context, Uri)
                if (path != null && FileUtils.isLocal(path)) {
                    File file = new File(path);
                }
            }
            break;
    }
}

项目地址:https://github.com/iPaulPro/aFileChooser

更正:github上给出的demo中是使用FileUtils.createGetContentIntent()来得到Intent,在4.4中会弹出一个功能比较复杂的activity,实际上这是由系统提供的一个叫DocumentsUI的activity 跟这个项目一点关系都没有,只不过他的调用与返回值形式和FileChooserActivity的调用与返回值形式一致。如果要用在4.4中使用FileChooserActivity的界面,不要使用FileUtils.createGetContentIntent()提供的intent,而是直接

Intent intent = new Intent(FileChooserExampleActivity.this,FileChooserActivity.class);

同时在FileChooserExampleActivity的AndroidManifest中将 android:enabled属性去掉(demo中加了这一属性)

当然 在4.4以下的版本中会弹出如下的chooser:

然后选择select a file 就会进入到FileChooserActivity中。