bug记录
package com.supermario.filemanager; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import com.supermario.filemanager.MainActivity.FileAdapter.ViewHolder; import android.app.AlertDialog; import android.app.ListActivity; import android.app.ProgressDialog; import android.app.AlertDialog.Builder; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.DialogInterface.OnClickListener; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; public class MainActivity extends ListActivity { // 声明成员变量: //存放显示的文件列表的名称 private List<String> mFileNames = null; //存放显示的文件列表的相对应的路径 private List<String> mFilePaths = null; //起始目录“/” private String mRootPath = java.io.File.separator; // SD卡根目录 private String mSDCard = Environment.getExternalStorageDirectory().toString(); private String mOldFilePath = ""; private String mNewFilePath = ""; private String keyWords; //用于显示当前路径 private TextView mPathTextView; //用于放置工具栏 private GridView mToolbarGridView; private int[] girdview_menu_image = {R.drawable.menu_phone,R.drawable.menu_sdcard,R.drawable.menu_search, R.drawable.menu_create,R.drawable.menu_palse,R.drawable.menu_exit}; private String[] gridview_menu_title = {"手机","SD卡","搜索","创建","粘贴","退出"}; // 代表手机或SD卡,1代表手机,2代表SD卡 private static int menuPosition = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //一开始程序的时候加载手机目录下的文件列表 initFileListInfo(mRootPath); //初始化菜单视图 initGridViewMenu(); //初始化菜单监听器 initMenuListener(); //为列表项绑定长按监听器 // getListView().setOnItemLongClickListener(this); mPathTextView = (TextView)findViewById(R.id.mPath); } public static String mCurrentFilePath=""; private void initFileListInfo(String filePath) { mCurrentFilePath = filePath; //显示当前的路径 mPathTextView.setText(filePath); mFileNames = new ArrayList<String>(); mFilePaths = new ArrayList<String>(); File mFile = new File(filePath); //遍历出该文件夹路径下的所有文件/文件夹 File[] mFiles = mFile.listFiles(); //只要当前路径不是手机根目录或者是sd卡根目录则显示“返回根目录”和“返回上一级” if(menuPosition == 1&&!mCurrentFilePath.equals(mRootPath)){ initAddBackUp(filePath,mRootPath); }else if(menuPosition == 2&&!mCurrentFilePath.equals(mSDCard)){ initAddBackUp(filePath,mSDCard); } /*将所有文件信息添加到集合中*/ for(File mCurrentFile:mFiles){ mFileNames.add(mCurrentFile.getName()); mFilePaths.add(mCurrentFile.getPath()); } /*适配数据*/ setListAdapter(new FileAdapter(MainActivity.this,mFileNames,mFilePaths)); } private boolean isAddBackUp = false; private void initAddBackUp(String filePath,String phone_sdcard){ if(!filePath.equals(phone_sdcard)){ /*列表项的第一项设置为返回根目录*/ mFileNames.add("BacktoRoot"); mFilePaths.add(phone_sdcard); /*列表项的第二项设置为返回上一级*/ mFileNames.add("BacktoUp"); //回到当前目录的父目录即回到上级 mFilePaths.add(new File(filePath).getParent()); //将添加返回按键标识位置为true isAddBackUp = true; } } /**为GridView配饰菜单资源*/ private void initGridViewMenu(){ mToolbarGridView = (GridView)findViewById(R.id.file_gridview_toolbar); //设置选中时候的背景图片 mToolbarGridView.setSelector(R.drawable.menu_item_selected); //设置背景图片 mToolbarGridView.setBackgroundResource(R.drawable.menu_background); //设置列数 mToolbarGridView.setNumColumns(6); //设置剧中对齐 mToolbarGridView.setGravity(Gravity.CENTER); //设置水平,垂直间距为10 mToolbarGridView.setVerticalSpacing(10); mToolbarGridView.setHorizontalSpacing(10); //设置适配器 mToolbarGridView.setAdapter(getMenuAdapter(gridview_menu_title,girdview_menu_image)); } /**菜单项的监听*/ protected void initMenuListener(){ mToolbarGridView.setOnItemClickListener(new OnItemClickListener(){ public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { switch(arg2) { //回到根目录 case 0: menuPosition = 1; initFileListInfo(mRootPath); break; //回到SD卡根目录 case 1: menuPosition = 2; initFileListInfo(mSDCard); break; //显示搜索对话框 // case 2: // searchDilalog(); // break; // //创建文件夹 // case 3: // createFolder(); // break; // //粘贴文件 // case 4: // palseFile(); // break; // //退出 case 5: MainActivity.this.finish(); break; } } }); } /**菜单适配器*/ private SimpleAdapter getMenuAdapter(String[] menuNameArray, int[] imageResourceArray) { //数组列表用于存放映射表 ArrayList<HashMap<String, Object>> mData = new ArrayList<HashMap<String, Object>>(); for (int i = 0; i < menuNameArray.length; i++) { HashMap<String, Object> mMap = new HashMap<String, Object>(); //将“image”映射成图片资源 mMap.put("image", imageResourceArray[i]); //将“title”映射成标题 mMap.put("title", menuNameArray[i]); mData.add(mMap); } //新建简单适配器,设置适配器的布局文件,映射关系 SimpleAdapter mAdapter = new SimpleAdapter(this, mData,R.layout.item_menu, new String[] { "image", "title" },new int[] { R.id.item_image, R.id.item_text }); return mAdapter; } class FileAdapter extends BaseAdapter{ //返回键,各种格式的文件的图标 private Bitmap mBackRoot; private Bitmap mBackUp; private Bitmap mImage; private Bitmap mAudio; private Bitmap mRar; private Bitmap mVideo; private Bitmap mFolder; private Bitmap mApk; private Bitmap mOthers; private Bitmap mTxt; private Bitmap mWeb; private Context mContext; //文件名列表 private List<String> mFileNameList; //文件对应的路径列表 private List<String> mFilePathList; public FileAdapter(Context context,List<String> fileName,List<String> filePath){ mContext = context; mFileNameList = fileName; mFilePathList = filePath; //初始化图片资源 //返回到根目录 mBackRoot = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.back_to_root); //返回到上一级目录 mBackUp = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.back_to_up); //图片文件对应的icon mImage = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.image); //音频文件对应的icon mAudio = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.audio); //视频文件对应的icon mVideo = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.video); //可执行文件对应的icon mApk = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.apk); //文本文档对应的icon mTxt = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.txt); //其他类型文件对应的icon mOthers = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.others); //文件夹对应的icon mFolder = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.folder); //zip文件对应的icon mRar = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.zip_icon); //网页文件对应的icon mWeb = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.web_browser); } //获得文件的总数 public int getCount() { return mFilePathList.size(); } //获得当前位置对应的文件名 public Object getItem(int position) { return mFileNameList.get(position); } //获得当前的位置 public long getItemId(int position) { return position; } //获得视图 public View getView(int position, View convertView, ViewGroup viewgroup) { ViewHolder viewHolder = null; if (convertView == null) { viewHolder = new ViewHolder(); LayoutInflater mLI = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //初始化列表元素界面 convertView = mLI.inflate(R.layout.list_child, null); //获取列表布局界面元素 viewHolder.mIV = (ImageView)convertView.findViewById(R.id.image_list_childs); viewHolder.mTV = (TextView)convertView.findViewById(R.id.text_list_childs); //将每一行的元素集合设置成标签 convertView.setTag(viewHolder); } else { //获取视图标签 viewHolder = (ViewHolder) convertView.getTag(); } File mFile = new File(mFilePathList.get(position).toString()); //如果 if(mFileNameList.get(position).toString().equals("BacktoRoot")){ //添加返回根目录的按钮 viewHolder.mIV.setImageBitmap(mBackRoot); viewHolder.mTV.setText("返回根目录"); }else if(mFileNameList.get(position).toString().equals("BacktoUp")){ //添加返回上一级菜单的按钮 viewHolder.mIV.setImageBitmap(mBackUp); viewHolder.mTV.setText("返回上一级"); }else if(mFileNameList.get(position).toString().equals("BacktoSearchBefore")){ //添加返回搜索之前目录的按钮 viewHolder.mIV.setImageBitmap(mBackRoot); viewHolder.mTV.setText("返回搜索之前目录"); }else{ String fileName = mFile.getName(); viewHolder.mTV.setText(fileName); if(mFile.isDirectory()){ viewHolder.mIV.setImageBitmap(mFolder); }else{ String fileEnds = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length()).toLowerCase();//取出文件后缀名并转成小写 if(fileEnds.equals("m4a")||fileEnds.equals("mp3")||fileEnds.equals("mid")||fileEnds.equals("xmf")||fileEnds.equals("ogg")||fileEnds.equals("wav")){ viewHolder.mIV.setImageBitmap(mVideo); }else if(fileEnds.equals("3gp")||fileEnds.equals("mp4")){ viewHolder.mIV.setImageBitmap(mAudio); }else if(fileEnds.equals("jpg")||fileEnds.equals("gif")||fileEnds.equals("png")||fileEnds.equals("jpeg")||fileEnds.equals("bmp")){ viewHolder.mIV.setImageBitmap(mImage); }else if(fileEnds.equals("apk")){ viewHolder.mIV.setImageBitmap(mApk); }else if(fileEnds.equals("txt")){ viewHolder.mIV.setImageBitmap(mTxt); }else if(fileEnds.equals("zip")||fileEnds.equals("rar")){ viewHolder.mIV.setImageBitmap(mRar); }else if(fileEnds.equals("html")||fileEnds.equals("htm")||fileEnds.equals("mht")){ viewHolder.mIV.setImageBitmap(mWeb); }else { viewHolder.mIV.setImageBitmap(mOthers); } } } return convertView; } //用于存储列表每一行元素的图片和文本 class ViewHolder { ImageView mIV; TextView mTV; } } }
文件管理器,点击SD卡,再点击退出。重新打开会闪退,必须再点击一次才能打开。