Android 文件選擇器詳解及實例代碼
本文給大家講解下Android文件選擇器的使用。實際上就是獲取用戶在SD卡中選擇的文件或文件夾的路徑,這很像C#中的OpenFileDialog控件。
此實例的實現(xiàn)過程很簡單,這樣可以讓大家快速的熟悉Android文件選擇器,提高開發(fā)效率。
網(wǎng)上曾經(jīng)見到過一個關(guān)于文件選擇器的實例,很多人都看過,本實例是根據(jù)它修改而成的,但更容易理解,效率也更高,另外,本實例有自己的特點:
1、監(jiān)聽了用戶按下Back鍵的事件,使其返回上一層目錄。
2、針對不同的文件類型(文件vs文件夾 , 目標(biāo)文件vs其他文件)做了特殊處理。
知識點一、 File 類的使用
文件選擇器的主要功能是:瀏覽文件\文件夾、文件類型等;都是通過Java File類來實現(xiàn)的。
知識點二、調(diào)用方法說明
使用了startActivityForResult()發(fā)起調(diào)用以及onActivityResult()方法接收回調(diào)后的信息。
先貼上效果圖如下:

其他的也沒什么好說了,大家看看代碼注釋吧,很簡單。
FileChooserActivity.java 實現(xiàn)文件選擇的類 。
Java代碼
public class CopyOfFileChooserActivity extends Activity {
private String mSdcardRootPath ; //sdcard 根路徑
private String mLastFilePath ; //當(dāng)前顯示的路徑
private ArrayList<FileInfo> mFileLists ;
private FileChooserAdapter mAdatper ;
//配置適配器
private void setGridViewAdapter(String filePath) {
updateFileItems(filePath);
mAdatper = new FileChooserAdapter(this , mFileLists);
mGridView.setAdapter(mAdatper);
}
//根據(jù)路徑更新數(shù)據(jù),并且通知Adatper數(shù)據(jù)改變
private void updateFileItems(String filePath) {
mLastFilePath = filePath ;
mTvPath.setText(mLastFilePath);
if(mFileLists == null)
mFileLists = new ArrayList<FileInfo>() ;
if(!mFileLists.isEmpty())
mFileLists.clear() ;
File[] files = folderScan(filePath);
if(files == null)
return ;
for (int i = 0; i < files.length; i++) {
if(files[i].isHidden()) // 不顯示隱藏文件
continue ;
String fileAbsolutePath = files[i].getAbsolutePath() ;
String fileName = files[i].getName();
boolean isDirectory = false ;
if (files[i].isDirectory()){
isDirectory = true ;
}
FileInfo fileInfo = new FileInfo(fileAbsolutePath , fileName , isDirectory) ;
//添加至列表
mFileLists.add(fileInfo);
}
//When first enter , the object of mAdatper don't initialized
if(mAdatper != null)
mAdatper.notifyDataSetChanged(); //重新刷新
}
//獲得當(dāng)前路徑的所有文件
private File[] folderScan(String path) {
File file = new File(path);
File[] files = file.listFiles();
return files;
}
private AdapterView.OnItemClickListener mItemClickListener = new OnItemClickListener() {
public void onItemClick(AdapterView<?> adapterView, View view, int position,
long id) {
FileInfo fileInfo = (FileInfo)(((FileChooserAdapter)adapterView.getAdapter()).getItem(position));
if(fileInfo.isDirectory()) //點擊項為文件夾, 顯示該文件夾下所有文件
updateFileItems(fileInfo.getFilePath()) ;
else if(fileInfo.isPPTFile()){ //是ppt文件 , 則將該路徑通知給調(diào)用者
Intent intent = new Intent();
intent.putExtra(EXTRA_FILE_CHOOSER, fileInfo.getFilePath());
setResult(RESULT_OK , intent);
finish();
}
else { //其他文件.....
toast(getText(R.string.open_file_error_format));
}
}
};
public boolean onKeyDown(int keyCode , KeyEvent event){
if(event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode()
== KeyEvent.KEYCODE_BACK){
backProcess();
return true ;
}
return super.onKeyDown(keyCode, event);
}
//返回上一層目錄的操作
public void backProcess(){
//判斷當(dāng)前路徑是不是sdcard路徑 , 如果不是,則返回到上一層。
if (!mLastFilePath.equals(mSdcardRootPath)) {
File thisFile = new File(mLastFilePath);
String parentFilePath = thisFile.getParent();
updateFileItems(parentFilePath);
}
else { //是sdcard路徑 ,直接結(jié)束
setResult(RESULT_CANCELED);
finish();
}
}
}
此實例的界面稍顯簡陋,不過大家可以在此基礎(chǔ)上完善,添加其他功能。本實例代碼下載地址:
http://download.csdn.net/detail/qinjuning/4825392。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Android之RecyclerView實現(xiàn)時光軸效果示例
本篇文章主要介紹了Android之RecyclerView實現(xiàn)時光軸效果,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
Android開發(fā)5:應(yīng)用程序窗口小部件App Widgets的實現(xiàn)(附demo)
本篇文章主要介紹了android應(yīng)用程序窗口小部件App Widgets的實現(xiàn),具有一定的參考價值,有需要的可以了解一下。2016-11-11
Android Toolbar自定義標(biāo)題標(biāo)題居中的實例代碼
這篇文章主要介紹了Android Toolbar自定義標(biāo)題 標(biāo)題居中的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-08-08
使用Java代碼在Android中實現(xiàn)圖片裁剪功能
這篇文章主要介紹了使用Java代碼在Android中實現(xiàn)圖片裁剪功能,許多應(yīng)用都需要此類從相冊中選取圖片然后編輯的功能,需要的朋友可以參考下2015-07-07
android編程獲取和設(shè)置系統(tǒng)鈴聲和音量大小的方法
這篇文章主要介紹了android編程獲取和設(shè)置系統(tǒng)鈴聲和音量大小的方法,實例分析了Android針對音頻的相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
基于Android中的 AutoCompleteTextView實現(xiàn)自動填充
本篇文章小編為大家介紹,基于Android中的 AutoCompleteTextView實現(xiàn)自動填充。需要的朋友參考下2013-04-04

