android 选择手机sdcard中的文件,获得其路径

package com.email.selectfile.adapter;

import java.util.ArrayList;

import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.email.R;

public class FileChooserAdapter extends BaseAdapter{


	private ArrayList<FileInfo> mFileLists;
	private LayoutInflater mLayoutInflater = null;

	private static ArrayList<String> arrayList = new ArrayList<String>();

	public FileChooserAdapter(Context context, ArrayList<FileInfo> fileLists) {
		super();
		mFileLists = fileLists;
		mLayoutInflater = (LayoutInflater) context
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return mFileLists.size();
	}

	@Override
	public FileInfo getItem(int position) {
		// TODO Auto-generated method stub
		return mFileLists.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		View view = null;
		ViewHolder holder = null;
		if (convertView == null || convertView.getTag() == null) {
			view = mLayoutInflater.inflate(R.layout.filechooser_gridview_item,
					null);
			holder = new ViewHolder(view);
			view.setTag(holder);
		} else {
			view = convertView;
			holder = (ViewHolder) convertView.getTag();
		}

		FileInfo fileInfo = getItem(position);
        //TODO 
		
		holder.tvFileName.setText(fileInfo.getFileName());
		
		if(fileInfo.isDirectory()){      //文件夹
			holder.imgFileIcon.setImageResource(R.drawable.ic_folder);
			holder.tvFileName.setTextColor(Color.GRAY);
		}
		else if(fileInfo.isPPTFile()){   //PPT文件
			holder.imgFileIcon.setImageResource(R.drawable.ic_ppt);
			holder.tvFileName.setTextColor(Color.RED);
		}
		else {                           //未知文件
			holder.imgFileIcon.setImageResource(R.drawable.ic_file_unknown);
			holder.tvFileName.setTextColor(Color.GRAY);
		}
		return view;
	}

	static class ViewHolder {
		ImageView imgFileIcon;
		TextView tvFileName;

		public ViewHolder(View view) {
			imgFileIcon = (ImageView) view.findViewById(R.id.imgFileIcon);
			tvFileName = (TextView) view.findViewById(R.id.tvFileName);
		}
	}

	
	enum FileType {
		FILE , DIRECTORY;
	}

	// =========================
	// Model
	// =========================	
	public static class FileInfo {
		private FileType fileType;
		private String fileName;
		private String filePath;

		public FileInfo(String filePath, String fileName, boolean isDirectory) {
			this.filePath = filePath;
			this.fileName = fileName;
			fileType = isDirectory ? FileType.DIRECTORY : FileType.FILE;
		}

		public boolean isPPTFile(){
			if(fileName.lastIndexOf(".") < 0)  //Don't have the suffix 
				return false ;
			String fileSuffix = fileName.substring(fileName.lastIndexOf("."));
			if(!isDirectory() && arrayList.contains(fileSuffix))
				return true ;
			else
				return false ;
		}
  
		public boolean isDirectory(){
			if(fileType == FileType.DIRECTORY)
				return true ;
			else
				return false ;
		}
		
		public String getFileName() {
			return fileName;
		}

		public void setFileName(String fileName) {
			this.fileName = fileName;
		}

		public String getFilePath() {
			return filePath;
		}

		public void setFilePath(String filePath) {
			this.filePath = filePath;
		}

		@Override
		public String toString() {
			return "FileInfo [fileType=" + fileType + ", fileName=" + fileName
					+ ", filePath=" + filePath + "]";
		}
	}

}

----------------------------------------------------------------------------------------------------------------------------------------------------------------

package com.email.selectfile;

import java.io.File;
import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.TextView;

import com.email.R;
import com.email.selectfile.adapter.FileChooserAdapter;
import com.email.selectfile.adapter.FileChooserAdapter.FileInfo;
import com.email.sendmail.SendEmailActivity;

public class FileChooserActivity extends Activity {
    
    private GridView mGridView;
    private View mBackView;
    private View mBtExit;
    private TextView mTvPath ;
    
    private String mSdcardRootPath ;  //sdcard 根路径
    private String mLastFilePath ;    //当前显示的路径
    
    private ArrayList<FileInfo> mFileLists  ;
    private FileChooserAdapter mAdatper ;
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.filechooser_show);

        mSdcardRootPath = Environment.getExternalStorageDirectory().getAbsolutePath();// �õ�sdcardĿ¼

        mBackView = findViewById(R.id.imgBackFolder);
        mBackView.setOnClickListener(mClickListener);
        mBtExit = findViewById(R.id.btExit);
        mBtExit.setOnClickListener(mClickListener);
        
        mTvPath = (TextView)findViewById(R.id.tvPath);
        
        mGridView = (GridView)findViewById(R.id.gvFileChooser);
        mGridView.setEmptyView(findViewById(R.id.tvEmptyHint));
        mGridView.setOnItemClickListener(mItemClickListener);
        setGridViewAdapter(mSdcardRootPath);
    }
    //配置适配器
    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 View.OnClickListener mClickListener = new  OnClickListener() {
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.imgBackFolder:
                backProcess();
                break;
            case R.id.btExit :
                setResult(RESULT_CANCELED);
                finish();
                break ;
            default :
                    break ;
            }
        }
    };
    
    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{  //是文件 , 则将该路径通知给调用者
                Intent intent = new Intent();
                intent.putExtra(SendEmailActivity.EXTRA_FILE_CHOOSER , fileInfo.getFilePath());
                setResult(RESULT_OK , intent);
                finish();
            }
        }
    };
    
    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();
        }
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值