package com.kaixin.android.activity; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.kaixin.android.KXActivity; import com.kaixin.android.R; import com.kaixin.android.utils.PhoneComparator; import com.kaixin.android.view.LoadingDailog; import com.nostra13.universalimageloader.core.ImageLoader; /** * 手机图片文件类 * * @author gyz * */ public class PhoneAlbumActivity extends KXActivity { private Button mCancel; private ListView mDisplay; private PhoneAlnumAdapter mAdapter; // private LoadImagesFolderFromSDCard loadImageTask; public static Activity mInstance; private String filePath; private String folderIdColumn; private String folderColumn; private String fileIdColumn; private String fileNameColumn; private String pathColumn; private LoadingDailog loadingDailog; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.phonealbum_activity); findViewById(); setListener(); init(); } private void findViewById() { mCancel = (Button) findViewById(R.id.phonealbum_cancel); mDisplay = (ListView) findViewById(R.id.phonealbum_display); } private void setListener() { mCancel.setOnClickListener(new OnClickListener() { public void onClick(View v) { //关闭当前界面 finish(); } }); mDisplay.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { //传递文件夹地址到文件夹内容显示类 Intent intent = new Intent(); intent.setClass(PhoneAlbumActivity.this, AlbumActivity.class); String path = (String) mKXApplication.mPhoneAlbum.keySet() .toArray()[arg2]; intent.putExtra("path", path); startActivity(intent); } }); } private void init() { mInstance = this; mKXApplication.mPhoneAlbum.clear(); // mAdapter = new PhoneAlnumAdapter(); // mDisplay.setAdapter(mAdapter); // loadImageTask = new LoadImagesFolderFromSDCard(); // loadImageTask.execute(); // 获取手机里的图片内容 new Thread(new Runnable() { public void run() { runOnUiThread(new Runnable() { public void run() { loadingDailog = new LoadingDailog(PhoneAlbumActivity.this); loadingDailog.show(); } }); allScan(); getFiles(); runOnUiThread(new Runnable() { public void run() { mDisplay.setAdapter(new PhoneAlnumAdapter()); loadingDailog.dismiss(); // mAdapter.notifyDataSetChanged(); } }); } }).start(); } /*private void getImages() { //显示进度条 mProgressDialog = ProgressDialog.show(this, null, 正在加载...); new Thread(new Runnable() { @Override public void run() { Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; ContentResolver mContentResolver = MainActivity.this.getContentResolver(); //只查询jpeg和png的图片 Cursor mCursor = mContentResolver.query(mImageUri, null, MediaStore.Images.Media.MIME_TYPE + =? or + MediaStore.Images.Media.MIME_TYPE + =?, new String[] { image/jpeg, image/png }, MediaStore.Images.Media.DATE_MODIFIED); if(mCursor == null){ return; } while (mCursor.moveToNext()) { //获取图片的路径 String path = mCursor.getString(mCursor .getColumnIndex(MediaStore.Images.Media.DATA)); //获取该图片的父路径名 String parentName = new File(path).getParentFile().getName(); //根据父路径名将图片放入到mGruopMap中 if (!mGruopMap.containsKey(parentName)) { List<STRING> chileList = new ArrayList<STRING>(); chileList.add(path); mGruopMap.put(parentName, chileList); } else { mGruopMap.get(parentName).add(path); } } //通知Handler扫描图片完成 mHandler.sendEmptyMessage(SCAN_OK); mCursor.close(); } }).start(); } } } } }*/ public void allScan() { sendBroadcast(new Intent( Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); } /** * 获取文件目录下的图片内容 注:新方法,速度很快 * * @param folder */ private void getFiles(){ String[] projection = new String[] { MediaStore.Images.Media._ID, MediaStore.Images.Media.BUCKET_ID, // 直接包含该图片文件的文件夹ID,防止在不同下的文件夹重名 MediaStore.Images.Media.BUCKET_DISPLAY_NAME, // 直接包含该图片文件的文件夹名 MediaStore.Images.Media.DISPLAY_NAME, // 图片文件名 MediaStore.Images.Media.DATA // 图片绝对路径 }; Cursor cursor = PhoneAlbumActivity.this.getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, "", null, MediaStore.Images.Media.DATE_MODIFIED +" DESC"); while(cursor.moveToNext()){ folderIdColumn = cursor.getString(cursor .getColumnIndex(MediaStore.Images.Media.BUCKET_ID)); folderColumn = cursor.getString(cursor .getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME)); fileIdColumn = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media._ID)); fileNameColumn = cursor.getString(cursor .getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME)); pathColumn = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); if (mKXApplication.mPhoneAlbum.containsKey(folderIdColumn)) { List<Map<String, String>> list = mKXApplication.mPhoneAlbum .get(folderIdColumn); Map<String, String> map = new HashMap<String, String>(); map.put("image_name", fileNameColumn); map.put("image_path", pathColumn); map.put("image_parent_name", folderColumn); map.put("image_parent_path", folderColumn); list.add(map); } else { List<Map<String, String>> list = new ArrayList<Map<String, String>>(); Map<String, String> map = new HashMap<String, String>(); map.put("image_name", fileNameColumn); map.put("image_path", pathColumn); map.put("image_parent_name", folderColumn); map.put("image_parent_path", folderColumn); list.add(map); mKXApplication.mPhoneAlbum.put( folderIdColumn, list); // loadImageTask.publishProgress(list); } } List<Map.Entry<String, List<Map<String, String>>>> list = new LinkedList<Map.Entry<String, List<Map<String, String>>>>(mKXApplication.mPhoneAlbum.entrySet()); Collections.sort(list, Collections.reverseOrder(new PhoneComparator())); Map sortedMap = new LinkedHashMap(); for (Iterator it = list.iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); sortedMap.put(entry.getKey(), entry.getValue()); } mKXApplication.mPhoneAlbum = sortedMap; } private class PhoneAlnumAdapter extends BaseAdapter { public int getCount() { return mKXApplication.mPhoneAlbum.size(); } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { convertView = LayoutInflater.from(PhoneAlbumActivity.this) .inflate(R.layout.phonealbum_activity_item, null); holder = new ViewHolder(); holder.photo = (ImageView) convertView .findViewById(R.id.phonealbum_item_photo); holder.name = (TextView) convertView .findViewById(R.id.phonealbum_item_name); holder.count = (TextView) convertView .findViewById(R.id.phonealbum_item_count); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } List<Map<String, String>> list = mKXApplication.mPhoneAlbum .get(mKXApplication.mPhoneAlbum.keySet().toArray()[position]); // holder.photo.setImageBitmap(PhotoUtil.getImageThumbnail(list.get(0) // .get("image_path"), 70, 70)); ImageLoader.getInstance().displayImage("file:///" + list.get(0) .get("image_path"), holder.photo); holder.name.setText(list.get(0).get("image_parent_name")); holder.count.setText("(" + list.size() + ")"); return convertView; } class ViewHolder { ImageView photo; TextView name; TextView count; } } /** * 获取文件目录下的图片内容 注:老方法,效率很低 * * @param folder */ private void getFiles(File folder) { File[] files = folder.listFiles(); if (files != null) { for (int i = files.length - 1; i >= 0; i--) { File file = files[i]; if (getImageFile(file.getName())) { if (mKXApplication.mPhoneAlbum.containsKey(folder .getAbsolutePath())) { List<Map<String, String>> list = mKXApplication.mPhoneAlbum .get(folder.getAbsolutePath()); Map<String, String> map = new HashMap<String, String>(); map.put("image_name", file.getName()); map.put("image_path", file.getAbsolutePath()); map.put("image_parent_name", folder.getName()); map.put("image_parent_path", folder.getAbsolutePath()); list.add(map); } else { List<Map<String, String>> list = new ArrayList<Map<String, String>>(); Map<String, String> map = new HashMap<String, String>(); map.put("image_name", file.getName()); map.put("image_path", file.getAbsolutePath()); map.put("image_parent_name", folder.getName()); map.put("image_parent_path", folder.getAbsolutePath()); list.add(map); mKXApplication.mPhoneAlbum.put( folder.getAbsolutePath(), list); } } if (file.isDirectory()) { getFiles(file); } } } } /** * 判断是否为图片 * * @param fName * 文件的名字 * @return */ private boolean getImageFile(String fName) { boolean re; String end = fName .substring(fName.lastIndexOf(".") + 1, fName.length()) .toLowerCase(); if (end.equals("jpg") || end.equals("gif") || end.equals("png") || end.equals("jpeg") || end.equals("bmp")) { re = true; } else { re = false; } return re; } }