Android 文件选择器详解及实例代码

 更新时间:2016年10月23日 08:50:18   投稿:lqh  
这篇文章主要介绍了Android 文件选择器详解的相关资料,并附实例代码,需要的朋友可以参考下

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

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

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

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

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

       知识点一、 File 类的使用

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

       知识点二、调用方法说明  

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

       先贴上效果图如下:

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

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

Java代码

public class CopyOfFileChooserActivity extends Activity { 
   
  private String mSdcardRootPath ; //sdcard 根路径 
  private String mLastFilePath ;  //当前显示的路径 
   
  private ArrayList<FileInfo> mFileLists ; 
  private FileChooserAdapter mAdatper ; 
   
  //配置适配器 
  private void setGridViewAdapter(String filePath) { 
    updateFileItems(filePath); 
    mAdatper = new FileChooserAdapter(this , mFileLists); 
    mGridView.setAdapter(mAdatper); 
  } 
  //根据路径更新数据,并且通知Adatper数据改变 
  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(); //重新刷新 
  } 
  //获得当前路径的所有文件 
  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文件 , 则将该路径通知给调用者 
        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(){ 
    //判断当前路径是不是sdcard路径 , 如果不是,则返回到上一层。 
    if (!mLastFilePath.equals(mSdcardRootPath)) {  
      File thisFile = new File(mLastFilePath); 
      String parentFilePath = thisFile.getParent(); 
      updateFileItems(parentFilePath); 
    }  
    else {  //是sdcard路径 ,直接结束 
      setResult(RESULT_CANCELED); 
      finish(); 
    } 
  } 
} 

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

http://download.csdn.net/detail/qinjuning/4825392。

        感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Android开发之Flutter与webview通信桥梁实现

    Android开发之Flutter与webview通信桥梁实现

    这篇文章主要为大家介绍了Android开发之Flutter与webview通信桥梁实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 朋友圈实现图片+文字转发功能(必看篇)

    朋友圈实现图片+文字转发功能(必看篇)

    下面小编就为大家带来一篇朋友圈实现图片+文字转发功能(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Android使用SharedPreferences存储数据的实现方法

    Android使用SharedPreferences存储数据的实现方法

    这篇文章主要介绍了Android使用SharedPreferences存储数据的实现方法,可实现针对短信的临时保存功能,非常简单实用,需要的朋友可以参考下
    2016-06-06
  • Android实现动态体温计

    Android实现动态体温计

    这篇文章主要为大家详细介绍了Android实现动态体温计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Android仿京东顶部搜索框滑动伸缩动画效果

    Android仿京东顶部搜索框滑动伸缩动画效果

    这篇文章主要为大家详细介绍了Android仿京东顶部搜索框滑动伸缩动画效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • Android滑动冲突的完美解决方案

    Android滑动冲突的完美解决方案

    在Android开发中滑动冲突可以说是比较常见的一类问题,也是比较让人头疼的一类问题,两个原本完美的控件,组合在一起之后,忽然发现整个世界都不好了。滑动冲突主要分为同方向滑动冲突和不同方向滑动冲突,下面本文将详细说明两种滑动冲突如何解决。
    2016-08-08
  • Android自定义柱状图表的方法实例

    Android自定义柱状图表的方法实例

    柱状图是我们在日常开发中经常会用到的一种图表,下面这篇文章主要给大家介绍了关于Android如何自定义柱状图表的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-05-05
  • 创建Android库的方法及Android .aar文件用法小结

    创建Android库的方法及Android .aar文件用法小结

    本文给大家介绍了创建Android库的方法及Android中 .aar文件生成方法与用法详解,涉及到创建库模块操作步骤及开发注意事项,需要的朋友参考下吧
    2017-12-12
  • 详解Android使用@hide的API的方法

    详解Android使用@hide的API的方法

    这篇文章主要介绍了详解Android使用@hide的API的方法的相关资料,希望通过本文大家能理解掌握这部分内容,需要的朋友可以参考下
    2017-09-09
  • android调用WebService实例分析

    android调用WebService实例分析

    这篇文章主要介绍了android调用WebService的方法,以实例形式较为详细的分析了WebService的调用原理与具体使用方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10

最新评论