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

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

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

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

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

知识点一、 File 类的使用

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

知识点二、调用方法说明  

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

先贴上效果图如下:

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

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

Java代码
  1. public class CopyOfFileChooserActivity extends Activity {
  2. private String mSdcardRootPath ;  //sdcard 根路径
  3. private String mLastFilePath ;    //当前显示的路径
  4. private ArrayList<FileInfo> mFileLists  ;
  5. private FileChooserAdapter mAdatper ;
  6. //配置适配器
  7. private void setGridViewAdapter(String filePath) {
  8. updateFileItems(filePath);
  9. mAdatper = new FileChooserAdapter(this , mFileLists);
  10. mGridView.setAdapter(mAdatper);
  11. }
  12. //根据路径更新数据,并且通知Adatper数据改变
  13. private void updateFileItems(String filePath) {
  14. mLastFilePath = filePath ;
  15. mTvPath.setText(mLastFilePath);
  16. if(mFileLists == null)
  17. mFileLists = new ArrayList<FileInfo>() ;
  18. if(!mFileLists.isEmpty())
  19. mFileLists.clear() ;
  20. File[] files = folderScan(filePath);
  21. if(files == null)
  22. return ;
  23. for (int i = 0; i < files.length; i++) {
  24. if(files[i].isHidden())  // 不显示隐藏文件
  25. continue ;
  26. String fileAbsolutePath = files[i].getAbsolutePath() ;
  27. String fileName = files[i].getName();
  28. boolean isDirectory = false ;
  29. if (files[i].isDirectory()){
  30. isDirectory = true ;
  31. }
  32. FileInfo fileInfo = new FileInfo(fileAbsolutePath , fileName , isDirectory) ;
  33. //添加至列表
  34. mFileLists.add(fileInfo);
  35. }
  36. //When first enter , the object of mAdatper don't initialized
  37. if(mAdatper != null)
  38. mAdatper.notifyDataSetChanged();  //重新刷新
  39. }
  40. //获得当前路径的所有文件
  41. private File[] folderScan(String path) {
  42. File file = new File(path);
  43. File[] files = file.listFiles();
  44. return files;
  45. }
  46. private AdapterView.OnItemClickListener mItemClickListener = new OnItemClickListener() {
  47. public void onItemClick(AdapterView<?> adapterView, View view, int position,
  48. long id) {
  49. FileInfo fileInfo = (FileInfo)(((FileChooserAdapter)adapterView.getAdapter()).getItem(position));
  50. if(fileInfo.isDirectory())   //点击项为文件夹, 显示该文件夹下所有文件
  51. updateFileItems(fileInfo.getFilePath()) ;
  52. else if(fileInfo.isPPTFile()){  //是ppt文件 , 则将该路径通知给调用者
  53. Intent intent = new Intent();
  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. public boolean onKeyDown(int keyCode , KeyEvent event){
  64. if(event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode()
  65. == KeyEvent.KEYCODE_BACK){
  66. backProcess();
  67. return true ;
  68. }
  69. return super.onKeyDown(keyCode, event);
  70. }
  71. //返回上一层目录的操作
  72. public void backProcess(){
  73. //判断当前路径是不是sdcard路径 , 如果不是,则返回到上一层。
  74. if (!mLastFilePath.equals(mSdcardRootPath)) {
  75. File thisFile = new File(mLastFilePath);
  76. String parentFilePath = 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。

Android文件选择器的实例分享的更多相关文章

  1. android文件选择器、仿淘宝编辑页面、新手引导层等源码

    Android精选源码 单片机和安卓应用,传感器 文件选择器 android滑动选择的尺子view源码 android视频录制 视频压缩的源码 仿今日头条顶部导航指示器源码 Android框架+常用控 ...

  2. PHP文件锁定写入实例分享

    PHP文件锁定写入实例解析. 原文地址:http://www.jbxue.com/article/23118.html PHP文件写入方法,以应对多线程写入,具体代码: function file_w ...

  3. Android手机间使用socket进行文件互传实例

    这是一个Android手机间文件传输的例子,两个手机同时装上此app,然后输入接收端的ip,选择文件,可以多选,点确定,就发送到另一个手机,一个简单快捷文件快传实例.可以直接运用到项目中. 下面是文件 ...

  4. 也发一个自己实现的android简单文件选择器代码。支持多卡,排序

    一个很简单的文件选择器对话框,支持双sd卡,当然前提是要有sd卡..并且实现了排序效果. 只有100多行的代码,基本的思路就是用listview显示目录下的所有子文件,再判断是文件还是目录. 利用Co ...

  5. Android第三方文件选择器:aFileChooser

     Android第三方文件选择器:aFileChooser aFileChooser是Android平台上的一个第三方文件选择器,其在github上的项目主页是:https://github.co ...

  6. Android经典项目开发之天气APP实例分享

    原文:Android经典项目开发之天气APP实例分享 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/mzc186/article/details/5 ...

  7. Android FileUtil(android文件工具类)

    android开发和Java开发差不了多少,也会有许多相同的功能.像本文提到的文件存储,在Java项目和android项目里面用到都是相同的.只是android开发的一些路径做了相应的处理. 下面就是 ...

  8. Android 应用程序之间内容分享详解(一)

    一个Andoird应用程序的重要的地方是他们有相互沟通和整合的能力,一个应用程序可以和另一个应用程序交互,接下来我们来看看Android应用之间的内容分享 当你构建Intent的时候,必须要指定Int ...

  9. Android 应用程序之间内容分享详解(二)

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9428613 Android 应用程序之间内容分享详解(一) 之前给大家分享了你开发的应 ...

随机推荐

  1. MyBatis association的两种形式——MyBatis学习笔记之四

    一.嵌套的resultMap 这 种方法本质上就是上篇博文介绍的方法,只是把教师实体映射从association元素中提取出来,用一个resultMap元素表示.然后 association元素再引用 ...

  2. Hadoop序列化

      遗留问题: Hadoop序列化可以复用对象,是在哪里复用的? 介绍Hadoop序列化机制 Hadoop序列化机制详解 Hadoop序列化的核心 Hadoop序列化的比较接口 ObjectWrita ...

  3. Alibaba

    题意: 有n个东西在一条路上,已知他们的位置,和能获得他们的最后期限,求能获得n个东西的最小总时间. 分析: 想到了求”未来费用问题", dp[i][j][k]表示获得区间长i起点为j的所有 ...

  4. ios游戏开发--cocos2d学习(1)

    学习cocos2d需要一定的编程基础,最好了解objective-c的语法.至于下载和安装的过程网上有很多,这里不多介绍,直接进入项目的学习. 创建一个cocos2d项目,直接运行,效果如图: 左下角 ...

  5. bzoj 2599 [IOI2011]Race (点分治)

    [题意] 问树中长为k的路径中包含边数最少的路径所包含的边数. [思路] 统计经过根的路径.假设当前枚举到根的第S个子树,若x属于S子树,则有: ans<-dep[x]+min{ dep[y] ...

  6. av_interleaved_write_frame 网络不好的情况下返回较慢

    用libvlc做直播推流引擎在网络较差的情况下,需要关闭直播,并且重新开播.这个过程中,推流引擎重启,需要的是快速响应.实际上测试结果发现,经常会发生引擎关闭接口卡住.后来跟踪代码,定位到s_rtmp ...

  7. 对JDK,JRE,JVM的理解

    JAVA用到现在还是分不太清楚JDK,JRE,JVM这三者的区别与联系,一直都是模模糊糊的.所以今天整理下此中的关系. 简单说明:我们编写的.java文件经过JDK(JDK的bin目录下javac.e ...

  8. 值栈与ognl

    ValueStack (值栈): 1.贯穿整个Action的生命周期(每个Action类的对象实例都拥有一个ValueStack对象).相当于一个数据的中转站.在其中保存当前Action对象和其他相关 ...

  9. Android实例-手机震动(XE8+小米2)

    相关资料:http://blog.csdn.net/laorenshen/article/details/41148843 结果: 1.打开Vibrate权限为True. 2.规律震动我没感觉出来,有 ...

  10. HDU 5776 sum (模拟)

    sum 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5776 Description Given a sequence, you're asked ...