Android文件选择器的实例分享
16lz
2021-01-23
本文给大家讲解下Android文件选择器的使用。实际上就是获取用户在SD卡中选择的文件或文件夹的路径,这很像C#中的OpenFileDialog控件。
此实例的实现过程很简单,这样可以让大家快速的熟悉Android文件选择器,提高开发效率。
网上曾经见到过一个关于文件选择器的实例,很多人都看过,本实例是根据它修改而成的,但更容易理解,效率也更高,另外,本实例有自己的特点:
1、监听了用户按下Back键的事件,使其返回上一层目录。
2、针对不同的文件类型(文件vs文件夹 , 目标文件vs其他文件)做了特殊处理。
知识点一、 File 类的使用
文件选择器的主要功能是:浏览文件\文件夹、文件类型等;都是通过Java File类来实现的。
知识点二、调用方法说明
使用了startActivityForResult()发起调用以及onActivityResult()方法接收回调后的信息。
先贴上效果图如下:
其他的也没什么好说了,大家看看代码注释吧,很简单。
FileChooserActivity.java 实现文件选择的类 。
Java代码- publicclassCopyOfFileChooserActivityextendsActivity{
- privateStringmSdcardRootPath;//sdcard根路径
- privateStringmLastFilePath;//当前显示的路径
- privateArrayList<FileInfo>mFileLists;
- privateFileChooserAdaptermAdatper;
- //配置适配器
- privatevoidsetGridViewAdapter(StringfilePath){
- updateFileItems(filePath);
- mAdatper=newFileChooserAdapter(this,mFileLists);
- mGridView.setAdapter(mAdatper);
- }
- //根据路径更新数据,并且通知Adatper数据改变
- privatevoidupdateFileItems(StringfilePath){
- mLastFilePath=filePath;
- mTvPath.setText(mLastFilePath);
- if(mFileLists==null)
- mFileLists=newArrayList<FileInfo>();
- if(!mFileLists.isEmpty())
- mFileLists.clear();
- File[]files=folderScan(filePath);
- if(files==null)
- return;
- for(inti=0;i<files.length;i++){
- if(files[i].isHidden())//不显示隐藏文件
- continue;
- StringfileAbsolutePath=files[i].getAbsolutePath();
- StringfileName=files[i].getName();
- booleanisDirectory=false;
- if(files[i].isDirectory()){
- isDirectory=true;
- }
- FileInfofileInfo=newFileInfo(fileAbsolutePath,fileName,isDirectory);
- //添加至列表
- mFileLists.add(fileInfo);
- }
- //Whenfirstenter,theobjectofmAdatperdon'tinitialized
- if(mAdatper!=null)
- mAdatper.notifyDataSetChanged();//重新刷新
- }
- //获得当前路径的所有文件
- privateFile[]folderScan(Stringpath){
- Filefile=newFile(path);
- File[]files=file.listFiles();
- returnfiles;
- }
- privateAdapterView.OnItemClickListenermItemClickListener=newOnItemClickListener(){
- publicvoidonItemClick(AdapterView<?>adapterView,Viewview,intposition,
- longid){
- FileInfofileInfo=(FileInfo)(((FileChooserAdapter)adapterView.getAdapter()).getItem(position));
- if(fileInfo.isDirectory())//点击项为文件夹,显示该文件夹下所有文件
- updateFileItems(fileInfo.getFilePath());
- elseif(fileInfo.isPPTFile()){//是ppt文件,则将该路径通知给调用者
- Intentintent=newIntent();
- intent.putExtra(EXTRA_FILE_CHOOSER,fileInfo.getFilePath());
- setResult(RESULT_OK,intent);
- finish();
- }
- else{//其他文件.....
- toast(getText(R.string.open_file_error_format));
- }
- }
- };
- publicbooleanonKeyDown(intkeyCode,KeyEventevent){
- if(event.getAction()==KeyEvent.ACTION_DOWN&&event.getKeyCode()
- ==KeyEvent.KEYCODE_BACK){
- backProcess();
- returntrue;
- }
- returnsuper.onKeyDown(keyCode,event);
- }
- //返回上一层目录的操作
- publicvoidbackProcess(){
- //判断当前路径是不是sdcard路径,如果不是,则返回到上一层。
- if(!mLastFilePath.equals(mSdcardRootPath)){
- FilethisFile=newFile(mLastFilePath);
- StringparentFilePath=thisFile.getParent();
- updateFileItems(parentFilePath);
- }
- else{//是sdcard路径,直接结束
- setResult(RESULT_CANCELED);
- finish();
- }
- }
- }
此实例的界面稍显简陋,不过大家可以在此基础上完善,添加其他功能。本实例代码下载地址:http://download.csdn.net/detail/qinjuning/4825392。
更多相关文章
- Android的程序解码与XML文件解码
- Android - 文件读写操作总结
- android 开发 文件读写应用案例分析
- android 资源文件命名规则 drawable mipmap一样的
- android判断文件类型是否为音频文件
- Android文件存储位置简述