本文给大家讲解下Android文件选择器的使用。实际上就是获取用户在SD卡中选择的文件或文件夹的路径,这很像C#中的OpenFileDialog控件。

此实例的实现过程很简单,这样可以让大家快速的熟悉Android文件选择器,提高开发效率。

网上曾经见到过一个关于文件选择器的实例,很多人都看过,本实例是根据它修改而成的,但更容易理解,效率也更高,另外,本实例有自己的特点:

1、监听了用户按下Back键的事件,使其返回上一层目录。

2、针对不同的文件类型(文件vs文件夹 , 目标文件vs其他文件)做了特殊处理。

知识点一、 File 类的使用

文件选择器的主要功能是:浏览文件\文件夹、文件类型等;都是通过Java File类来实现的。

知识点二、调用方法说明

使用了startActivityForResult()发起调用以及onActivityResult()方法接收回调后的信息。

先贴上效果图如下:

Android文件选择器的实例分享

其他的也没什么好说了,大家看看代码注释吧,很简单。

FileChooserActivity.java 实现文件选择的类 。

Java代码
  1. publicclassCopyOfFileChooserActivityextendsActivity{
  2. privateStringmSdcardRootPath;//sdcard根路径
  3. privateStringmLastFilePath;//当前显示的路径
  4. privateArrayList<FileInfo>mFileLists;
  5. privateFileChooserAdaptermAdatper;
  6. //配置适配器
  7. privatevoidsetGridViewAdapter(StringfilePath){
  8. updateFileItems(filePath);
  9. mAdatper=newFileChooserAdapter(this,mFileLists);
  10. mGridView.setAdapter(mAdatper);
  11. }
  12. //根据路径更新数据,并且通知Adatper数据改变
  13. privatevoidupdateFileItems(StringfilePath){
  14. mLastFilePath=filePath;
  15. mTvPath.setText(mLastFilePath);
  16. if(mFileLists==null)
  17. mFileLists=newArrayList<FileInfo>();
  18. if(!mFileLists.isEmpty())
  19. mFileLists.clear();
  20. File[]files=folderScan(filePath);
  21. if(files==null)
  22. return;
  23. for(inti=0;i<files.length;i++){
  24. if(files[i].isHidden())//不显示隐藏文件
  25. continue;
  26. StringfileAbsolutePath=files[i].getAbsolutePath();
  27. StringfileName=files[i].getName();
  28. booleanisDirectory=false;
  29. if(files[i].isDirectory()){
  30. isDirectory=true;
  31. }
  32. FileInfofileInfo=newFileInfo(fileAbsolutePath,fileName,isDirectory);
  33. //添加至列表
  34. mFileLists.add(fileInfo);
  35. }
  36. //Whenfirstenter,theobjectofmAdatperdon'tinitialized
  37. if(mAdatper!=null)
  38. mAdatper.notifyDataSetChanged();//重新刷新
  39. }
  40. //获得当前路径的所有文件
  41. privateFile[]folderScan(Stringpath){
  42. Filefile=newFile(path);
  43. File[]files=file.listFiles();
  44. returnfiles;
  45. }
  46. privateAdapterView.OnItemClickListenermItemClickListener=newOnItemClickListener(){
  47. publicvoidonItemClick(AdapterView<?>adapterView,Viewview,intposition,
  48. longid){
  49. FileInfofileInfo=(FileInfo)(((FileChooserAdapter)adapterView.getAdapter()).getItem(position));
  50. if(fileInfo.isDirectory())//点击项为文件夹,显示该文件夹下所有文件
  51. updateFileItems(fileInfo.getFilePath());
  52. elseif(fileInfo.isPPTFile()){//是ppt文件,则将该路径通知给调用者
  53. Intentintent=newIntent();
  54. intent.putExtra(EXTRA_FILE_CHOOSER,fileInfo.getFilePath());
  55. setResult(RESULT_OK,intent);
  56. finish();
  57. }
  58. else{//其他文件.....
  59. toast(getText(R.string.open_file_error_format));
  60. }
  61. }
  62. };
  63. publicbooleanonKeyDown(intkeyCode,KeyEventevent){
  64. if(event.getAction()==KeyEvent.ACTION_DOWN&&event.getKeyCode()
  65. ==KeyEvent.KEYCODE_BACK){
  66. backProcess();
  67. returntrue;
  68. }
  69. returnsuper.onKeyDown(keyCode,event);
  70. }
  71. //返回上一层目录的操作
  72. publicvoidbackProcess(){
  73. //判断当前路径是不是sdcard路径,如果不是,则返回到上一层。
  74. if(!mLastFilePath.equals(mSdcardRootPath)){
  75. FilethisFile=newFile(mLastFilePath);
  76. StringparentFilePath=thisFile.getParent();
  77. updateFileItems(parentFilePath);
  78. }
  79. else{//是sdcard路径,直接结束
  80. setResult(RESULT_CANCELED);
  81. finish();
  82. }
  83. }
  84. }

此实例的界面稍显简陋,不过大家可以在此基础上完善,添加其他功能。本实例代码下载地址:http://download.csdn.net/detail/qinjuning/4825392。

更多相关文章

  1. Android的程序解码与XML文件解码
  2. Android - 文件读写操作总结
  3. android 开发 文件读写应用案例分析
  4. android 资源文件命名规则 drawable mipmap一样的
  5. android判断文件类型是否为音频文件
  6. Android文件存储位置简述

随机推荐

  1. Java解析APK获取版本信息
  2. Android(安卓)从 assets和res中读取文件
  3. Android逐条加载ListView,实现动画更新
  4. Android(安卓)修改R包名方法
  5. 写给Android(安卓)App开发人员看的Androi
  6. andorid ANR keyDispatchingTimedOut的原
  7. Android怎样绕开Camera打开手电筒的LED
  8. android导入外部已存在的数据库大于1M的
  9. Android高级界面组件之拖动条和评星条的
  10. 联发科联姻Android意义深远