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。

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

(0)

相关推荐

  • android中写一个内部类来选择文件夹中指定的图片类型实例说明

    复制代码 代码如下: /**本类是用来选择文件夹中是.jpg类型的图片*/ private class JpgFileFilter implements FilenameFilter{ @Override public boolean accept(File dir, String filename) { // TODO Auto-generated method stub return filename.endsWith(".jpg"); } }

  • android选择视频文件上传到后台服务器

    本文实例为大家分享了android选择视频文件上传到后台服务器的具体代码,供大家参考,具体内容如下 选择本地视频文件 附上Demo 首先第一步打开打开相册选择视频文件: Intent intent = new Intent(); intent.setType("video/*"); intent.setAction(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); ((Activity)

  • Android 文件选择的实现代码

    打开文件选择器 复制代码 代码如下: private void showFileChooser() {    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);     intent.setType("*/*");     intent.addCategory(Intent.CATEGORY_OPENABLE); try {        startActivityForResult( Intent.createChooser(

  • android通过蓝牙接收文件打开时无法自动选择合适的应用程序

    通过蓝牙接收文件,从历史传输记录打开,无法自动选择合适的应用程序 但是从file manager打开这个新接收的文件,是可以选择对应的应用程序(比如video player打开.3gp..mp4文件) 历史传输记录打开download的文件,是通过接收文件时对方传过来的mime type来选择适合的APP打开该文件 如果出现提示"未支持格式的文件",或者使用了错误的APP来打开该文件 原因在于发送方发送文件时填的mime type存在问题 如下的log是mtk接收方的log,请注意黄色

  • Android应用中实现选择本地文件与目录的实例分享

    文件选择器 今天给大家分享下文件选择器的作用 , 具体就是获取用户在在SD卡选中的文件/文件夹路径 ,类似于C#中OpenFileDialog控件(对C#的一站式开发还是念念不忘).功能实现起来比较简单,主要是帮助大家节省开发时间. 网上流传较广的一个成品如下 <[Android实例] 文件选择器>, 本文也是根据上面的成品修改而成,使其更易理解,效率更高. 除此之外,主要特色有: 1.我们监听了用户按下Back键的事件,使其返回上一层目录: 2.针对不同的文件类型(文件vs文件夹 , 目标文

  • Android第三方文件选择器aFileChooser使用方法详解

    aFileChooser是android平台上的一个第三方文件选择器,其在github上的项目主页是:https://github.com/iPaulPro/aFileChooser aFileChooser实现了在Android平台上高度可定制化的文件选择功能,aFileChooser在自己的项目代码中使用也比较简单. 写一个简单例子加以说明. (1) 首先要配置Androidmanifest.xml文件: <activity android:name="com.ipaulpro.afi

  • Android文件选择器ExFilePicker的使用方法

    在新版的android中(如Android 7.0+),文件选择由于权限限制,Uri变化,文件资源路径格式改版等等,变得比较复杂起来,比如,得在Androidmanifest配置FileProvider完了还得写xml目录下的文件path这些等等.一些第三方的文件选择器,就算没有上面这些动作,一般也得在Androidmanifest写几个Activity.而ExFilePicker则无需上面的繁琐操作,一不需要在Androidmanifest里面定义FileProvider,二不需要写xml文件

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

    本文给大家讲解下Android文件选择器的使用.实际上就是获取用户在SD卡中选择的文件或文件夹的路径,这很像C#中的OpenFileDialog控件. 此实例的实现过程很简单,这样可以让大家快速的熟悉Android文件选择器,提高开发效率. 网上曾经见到过一个关于文件选择器的实例,很多人都看过,本实例是根据它修改而成的,但更容易理解,效率也更高,另外,本实例有自己的特点:   1.监听了用户按下Back键的事件,使其返回上一层目录.        2.针对不同的文件类型(文件vs文件夹 , 目标

  • android 通知Notification详解及实例代码

    android Notification实例详解 1.使用Builder模式来创建 2.必须要设置一个smallIcon,还可以设置setTicker 3.可以设置 setContentTitle,setContentInfo,setContentText,setWhen 4.可以设置setDefaults(闪屏,声音,震动),通过Notification设置flags(能不能被清除) 5.发送需要获取一个NotificationManager(getSystemService来获取);noti

  • Android GPS定位详解及实例代码

    GPS定位是智能手机上一个比较有意思的功能,LBS等服务都有效的利用了GPS定位功能.本文就跟大家分享下Android开发中的GPS定位知识.      一.Android基础知识准备 1.Activity类 每一种移动开发环境都有自己的基类.如J2ME应用程序的基类是midlets,BREW的基类是applets,而Android程序的基类是Activity.这个activity为我们提供了对移动操作系统的基本功能和事件的访问.这个类包含了基本的构造方法,键盘处理,挂起来恢复功能,以及其他底层

  • Android 百分比布局详解及实例代码

    Android 百分比布局 1.引入:compile 'com.android.support:percent:24.0.0' 2.点开源码可以看到,主要有两个布局类PercentFrameLayout和PercentRelativeLayout,一个工具类PercentLayoutHelper. 3.点开布局类比如PercentRelativeLayout的源码,可以看到实现的很简单. public class PercentRelativeLayout extends RelativeLay

  • Android 图片选择详解及实例代码

     Android 图片选择 可以达到的效果: 1.第一个图片的位置放照相机,点击打开照相机 2.其余的是显示全部存储的图片,点击一次是查看大图,长按则是每张图片出现一个checkBox,可以进行选择 下面是实例效果图 MainActivity 类 public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener, AdapterView.OnItemLongClickLis

  • Android ListView position详解及实例代码

    我们在使用ListView的时候,一般都会为ListView添加一个响应事件android.widget.AdapterView.OnItemClickListener.对OnItemClickListener的position和id参数,我相信有些人在这上面走了些弯路. 在使用listview的时候,我们经常会在listview的监听事件中,例如OnItemClickListener(onItemClick)中,或listview的adapter中(getView.getItem.getIte

  • Android 消息机制详解及实例代码

    Android 消息机制 1.概述 Android应用启动时,会默认有一个主线程(UI线程),在这个线程中会关联一个消息队列(MessageQueue),所有的操作都会被封装成消息队列然后交给主线程处理.为了保证主线程不会退出,会将消息队列的操作放在一个死循环中,程序就相当于一直执行死循环,每循环一次,从其内部的消息队列中取出一个消息,然后回调相应的消息处理函数(handlerMessage),执行完成一个消息后则继续循环,若消息队列为空,线程则会阻塞等待.因此不会退出.如下图所示: Handl

  • Android语音识别技术详解及实例代码

    今天从网上找了个例子实现了语音识别,个人感觉挺好玩的,就把代码贴出来与大家分享下: Android中主要通过RecognizerIntent来实现语音识别,其实代码比较简单,但是如果找不到设置,就会抛出异常ActivityNotFoundException,所以我们需要捕捉这个异常.而且语音识别在模拟器上是无法测试的,因为语音识别是访问google云端数据,所以如果手机的网络没有开启,就无法实现识别声音的!一定要开启手机的网络,如果手机不存在语音识别功能的话,也是无法启用识别! 下面是Recog

  • Android ViewPagerIndicator详解及实例代码

    Android ViewPagerIndicator详解及实例代码 关于自定义View的属性零碎知识 自定义View和自定义属性的知识不再此提及,这里着重说的是属性在自定义View中的获取方式,自定义的属性如下: <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="Wisely"> <attr name=&

  • Android 文件操作详解及简单实例

     Android 文件操作详解 Android 的文件操作说白了就是Java的文件操作的处理.所以如果对Java的io文件操作比较熟悉的话,android的文件操作就是小菜一碟了.好了,话不多说,开始今天的正题吧. 先从一个小项目入门吧 首先是一个布局文件,这一点比较的简单,那就直接上代码吧. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="htt

随机推荐