android 下获取手机所有照片

来源:互联网 发布:淘宝零食批发店 编辑:程序博客网 时间:2024/06/12 01:36

最近看了很多论坛,有许多人需要获取手机所有照片,网上也有很多的源码,但大多经过测试都不能运行,这里我自己整理修改了一份获取手机所有照片信息的代码。闲话不说,呈现给大家!

第一个是需要用到的3个布局文档

 


image_show---------------:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:gravity="center"    android:orientation="vertical" >    <ImageView         android:id="@+id/ivImageShow"        android:layout_width="match_parent"        android:layout_height="wrap_content"        /><Button    android:id="@+id/btnClose"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:text="确定"   /></LinearLayout>simple_list_item:--------<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >   <ImageView        android:id="@+id/item_title"       android:layout_width="wrap_content"       android:layout_height="wrap_content"       /> </LinearLayout>


上面一个分别是以:main.xlm,     image_show.xml,    simple_list_item.xml   为名字的3个xml档。


 下面为代码部分:

  首先定义一个工具类

package com.getAllpic;import java.io.ByteArrayOutputStream;import java.io.InputStream;import android.graphics.Bitmap;import android.graphics.BitmapFactory;public class FileUtil { public FileUtil() {   }  //通过传进来的流生成一个Byte数组   public byte[] readInputStream(InputStream inStream) throws Exception {        byte[] buffer = new byte[1024];        int len = -1;        ByteArrayOutputStream outStream = new ByteArrayOutputStream();              while ((len = inStream.read(buffer)) != -1) {            outStream.write(buffer, 0, len);        }              byte[] data = outStream.toByteArray();        outStream.close();        inStream.close();              return data;   }    //生成图片的方法  public Bitmap getBitmapFromBytes(byte[] bytes, BitmapFactory.Options opts) {      if (bytes != null){          if (opts != null){               return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,opts);           }          else{              return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);           }      }            return null;   } }


接下来是活动界面:


  package com.getAllpic;import java.io.FileNotFoundException;import android.app.Dialog;import android.content.ContentResolver;import android.database.Cursor;import android.graphics.Bitmap;import android.net.Uri;import android.os.Bundle;import android.provider.MediaStore;import android.support.v4.app.FragmentActivity;import android.support.v4.app.LoaderManager.LoaderCallbacks;import android.support.v4.content.CursorLoader;import android.support.v4.content.Loader;import android.support.v4.widget.SimpleCursorAdapter;import android.support.v4.widget.SimpleCursorAdapter.ViewBinder;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.view.WindowManager;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;public class MyDevicePhotoActivity extends FragmentActivity implements LoaderCallbacks<Cursor>{    private Bitmap bitmap = null;    private byte[] mContent = null;    int num=0;        private ListView listView = null;    private SimpleCursorAdapter simpleCursorAdapter = null;        private static final String[] STORE_IMAGES = {        MediaStore.Images.Media.DISPLAY_NAME,        MediaStore.Images.Media.LATITUDE,        MediaStore.Images.Media.LONGITUDE,        MediaStore.Images.Media._ID    };        /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                listView = (ListView)findViewById(R.id.list);        simpleCursorAdapter = new SimpleCursorAdapter(                this,                 R.layout.simple_list_item,                 null,                 STORE_IMAGES,                 new int[] { R.id.item_title},                 0                );                simpleCursorAdapter.setViewBinder(new ImageLocationBinder());        Log.i("info", (simpleCursorAdapter==null)+"");        listView.setAdapter(simpleCursorAdapter);        // 注意此处是getSupportLoaderManager(),而不是getLoaderManager()方法。        getSupportLoaderManager().initLoader(0, null, this);        // 单击显示图片        listView.setOnItemClickListener(new ShowItemImageOnClickListener());    }        @Override    public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {        // TODO Auto-generated method stub        // 为了查看信息,需要用到CursorLoader。        CursorLoader cursorLoader = new CursorLoader(                this,                 MediaStore.Images.Media.EXTERNAL_CONTENT_URI,                 STORE_IMAGES,                 null,                 null,                 null);        return cursorLoader;    }        @Override    public void onLoaderReset(Loader<Cursor> arg0) {        simpleCursorAdapter.swapCursor(null);    }        @Override    public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {        // 使用swapCursor()方法,以使旧的游标不被关闭.        simpleCursorAdapter.swapCursor(cursor);    }       // 将图片的位置绑定到视图    private class ImageLocationBinder implements ViewBinder{         @Override        public boolean setViewValue(View view, Cursor cursor, int arg2) {        Log.i("info", "setViewValue");               //此处arg2代表的是STORE_IMAGES数组的索引        if(arg2==0){        long id=cursor.getLong(3);         Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon().appendPath(Long.toString(id)).build();         FileUtil file = new FileUtil();                  ContentResolver resolver = getContentResolver();                  try {mContent = file.readInputStream(resolver.openInputStream(Uri.parse(uri.toString())));} catch (FileNotFoundException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}                  if(mContent!=null)                  bitmap = file.getBitmapFromBytes(mContent, null);                  if(bitmap!=null)                  bitmap=Bitmap.createScaledBitmap(bitmap,getResources().getDisplayMetrics().widthPixels,                 getResources().getDisplayMetrics().heightPixels/2, true);                  ((ImageView)view).setImageBitmap(bitmap);                  return true;        }        return false;        }    }        // 单击项显示图片事件监听器    private class ShowItemImageOnClickListener implements OnItemClickListener{        @Override        public void onItemClick(AdapterView<?> parent, View view, int position,                long id) {        num=parent.getChildCount();            // TODO Auto-generated method stub            final Dialog dialog = new Dialog(MyDevicePhotoActivity.this);                        // 以对话框形式显示图片            dialog.setContentView(R.layout.image_show);            dialog.setTitle("图片显示");            ImageView ivImageShow = (ImageView) dialog.findViewById(R.id.ivImageShow);            Button btnClose = (Button) dialog.findViewById(R.id.btnClose);                        btnClose.setOnClickListener(new OnClickListener() {                                @Override                public void onClick(View v) {                    dialog.dismiss();                }            });            Log.i("info", id+"+++++++id");            Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon().                      appendPath(Long.toString(id)).build();            FileUtil file = new FileUtil();            ContentResolver resolver = getContentResolver();                        // 从Uri中读取图片资源            try {                mContent = file.readInputStream(resolver.openInputStream(Uri.parse(uri.toString())));                bitmap = file.getBitmapFromBytes(mContent, null);                                //******************************************设置对话框大小****************                Window diaWindow=dialog.getWindow();                WindowManager.LayoutParams lp=diaWindow.getAttributes();                lp.width=MyDevicePhotoActivity.this.getResources().getDisplayMetrics().widthPixels;                lp.height=MyDevicePhotoActivity.this.getResources().getDisplayMetrics().heightPixels/2;                diaWindow.setAttributes(lp);                                bitmap=Bitmap.createScaledBitmap(bitmap,lp.width/2,                 lp.height/2, true);                ivImageShow.setImageBitmap(bitmap);            } catch (Exception e) {                // TODO: handle exception                e.printStackTrace();            }                   dialog.show();        }    }}


好了,以上就是获取手机所有照片的方法。如果还有什么问题,大家可以问我!

0 0
原创粉丝点击