可擴展的文件選擇器NoNonsense-FilePicker

AntK52 8年前發布 | 7K 次閱讀 Android開發 移動開發

來自: http://www.jcodecraeer.com//a/anzhuokaifa/androidkaifa/2014/1012/1754.html


下面的內容主要來自于該項目github頁面的翻譯:NoNonsense-FilePicker項目介紹:http://jcodecraeer.com/a/opensource/2014/1012/1753.html

NoNonsense-FilePicker有如下特點:

1.可擴展以適應不同的數據源。

2.支持多選。

3.可以選擇目錄或者是文件。

4.可以在選擇器中新建目錄。

NoNonsense-FilePicker不只是另外一個文件選擇器而已

我需要的是這樣一個文件選擇器:
1.容易擴展,文件來源既可以是本地sdcard,也可以是來自云端的dropboxapi。
2.可以在選擇器中創建目錄。
本項目具備上述的兩個要求,同時很好的適配了平板和手機兩種UI效果。項目的核心是在一個abstract 類中,因此你可以很方便的繼承以實現自己需要的選擇器。
項目本身已經包含了一個能夠選擇本地sdcard文件的實現,但你完全可以擴展實現一個文件列表來源于云端的選擇器,比如Dropbox, ftp,ssh等。

選擇器是基于activity,在屏幕較小的設備上全屏顯示,而在較大的屏幕上則顯示成dialog的方式,這個特性是系統主題中做到的,因此為activity選擇一個正確的主題至關重要。

使用說明:

該庫的核心思想是做到可擴展,但是你只是想選擇sdcard中的文件,只需閱讀關于如何使用sdcard文件選擇器就可以了。

首選需要加上文件訪問權限:

1
<uses-permission android:name= "android.permission.WRITE_EXTERNAL_STORAGE" />

將選擇器的app注冊到AndroidManifest.xml

1
2
3
4
5
6
7
8
9
<activity
android:name= "com.nononsenseapps.filepicker.FilePickerActivity"
android:label= "@string/app_name"
android:theme= "@style/FilePicker.Theme" >
<intent-filter>
<action android:name= "android.intent.action.GET_CONTENT" />
<category android:name= "android.intent.category.DEFAULT" />
</intent-filter>
</activity>

在java代碼中調用選擇器:

1
2
3
4
5
6
7
8
9
// This always works
Intent i = new Intent(context, FilePickerActivity.class);
// This works if you defined the intent filter
// Intent i = new Intent(Intent.ACTION_GET_CONTENT);
// Set these depending on your use case. These are the defaults.
i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false );
i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, false );
i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_FILE);
startActivityForResult(i, FILE_CODE);

獲取選擇的返回值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == FILE_CODE && resultCode == Activity.RESULT_OK) {
if (data.getBooleanExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false )) {
// For JellyBean and above
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
ClipData clip = data.getClipData();
if (clip != null ) {
for (int i = 0; i < clip.getItemCount(); i++) {
Uri uri = clip.getItemAt(i).getUri();
// Do something with the URI
}
}
// For Ice Cream Sandwich
} else {
ArrayList<String> paths = data.getStringArrayListExtra
(FilePickerActivity.EXTRA_PATHS);
if (paths != null ) {
for (String path: paths) {
Uri uri = Uri.parse(path);
// Do something with the URI
}
}
}
} else {
Uri uri = data.getData();
// Do something with the URI
}
}
}



 本文由用戶 AntK52 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!