android 选择手机sdcard中的文件,获得其路径
2013-10-17 14:35
387 查看
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(); } } }
相关文章推荐
- /mnt/sdcard或者/sdcard这是Android手机中SD卡的文件夹路径
- Android Http下载文件到手机内存与SDCard
- android Sdcard中创建文件路径,并且返回文件路径
- Android手机误删SDCard文件后的数据恢复
- android 文件浏览。打开sdcard文件夹。只显示文件夹和txt文件。选择txt文件返回其名字
- Android调用系统自带的文件管理器进行文件选择并获得路径,android文件管理器
- Android 手机sdcard目录或文件的拷贝、移动、删除(递归)
- android 在应用的配置文件设置apk的安装路径,以下是安装到sdcard上的方式
- android中将数据写入手机内存和sdcard中的文件
- Android 文件路径(/mnt/sdcard/...)、Uri(content://media/external/...)
- Android:文件路径(/mnt/sdcard/...)、Uri(content://media/external/...)学习
- Android调用系统自带的文件管理器进行文件选择并获得路径,android文件管理器
- Android调用系统自带的文件管理器进行文件选择并获得路径
- android读取sdcard路径下的文件的方法
- Android File 转Inputstram,跳转手机sdcard 获取指定文件
- 转载 : Android 使用自带的文件管理器选择文件并获得绝对路径
- Android 手机sdcard目录或文件的拷贝、移动、删除(递归)
- android中将数据写入手机内存和sdcard中的文件
- android中选择文件,部分手机找不到文件路径问题的解决
- android列出手机SDcard上的所有PDF文件并查阅它