android 下获取手机所有照片

android 下获取手机所有照片

  1558人阅读  评论(4)  收藏  举报
  分类:
[java]  view plain  copy
  1.   

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

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

 

[java]  view plain  copy
  1.   

[java]  view plain  copy
  1. image_show---------------:  
  2.   
  3. <?xml version="1.0" encoding="utf-8"?>  
  4. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  5.     android:layout_width="match_parent"  
  6.     android:layout_height="wrap_content"  
  7.     android:gravity="center"  
  8.     android:orientation="vertical" >  
  9.     <ImageView   
  10.         android:id="@+id/ivImageShow"  
  11.         android:layout_width="match_parent"  
  12.         android:layout_height="wrap_content"  
  13.         />  
  14. <Button   
  15.    android:id="@+id/btnClose"  
  16.    android:layout_width="wrap_content"  
  17.    android:layout_height="wrap_content"  
  18.    android:text="确定"  
  19.    />  
  20. </LinearLayout>  
  21.   
  22. simple_list_item:--------  
  23.   
  24. <?xml version="1.0" encoding="utf-8"?>  
  25. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  26.     android:layout_width="match_parent"  
  27.     android:layout_height="match_parent"  
  28.     android:orientation="vertical" >  
  29.    <ImageView   
  30.        android:id="@+id/item_title"  
  31.        android:layout_width="wrap_content"  
  32.        android:layout_height="wrap_content"  
  33.        />   
  34. </LinearLayout>  


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


 下面为代码部分:

  首先定义一个工具类

[java]  view plain  copy
  1. package com.getAllpic;  
  2.   
  3.   
  4. import java.io.ByteArrayOutputStream;  
  5. import java.io.InputStream;  
  6.   
  7.   
  8. import android.graphics.Bitmap;  
  9. import android.graphics.BitmapFactory;  
  10.   
  11.   
  12. public class FileUtil {  
  13.  public FileUtil() {  
  14.    }  
  15.   //通过传进来的流生成一个Byte数组  
  16.    public byte[] readInputStream(InputStream inStream) throws Exception {   
  17.        byte[] buffer = new byte[1024];   
  18.        int len = -1;   
  19.        ByteArrayOutputStream outStream = new ByteArrayOutputStream();  
  20.          
  21.        while ((len = inStream.read(buffer)) != -1) {   
  22.            outStream.write(buffer, 0, len);   
  23.        }  
  24.          
  25.        byte[] data = outStream.toByteArray();   
  26.        outStream.close();   
  27.        inStream.close();  
  28.          
  29.        return data;   
  30.   }   
  31.    //生成图片的方法  
  32.   public Bitmap getBitmapFromBytes(byte[] bytes, BitmapFactory.Options opts) {  
  33.       if (bytes != null){  
  34.           if (opts != null){   
  35.               return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,opts);   
  36.           }  
  37.           else{  
  38.               return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);   
  39.           }  
  40.       }  
  41.         
  42.       return null;   
  43.   }   
  44. }  


接下来是活动界面:


[java]  view plain  copy
  1.   package com.getAllpic;  
  2.   
  3.   
  4. import java.io.FileNotFoundException;  
  5.   
  6.   
  7. import android.app.Dialog;  
  8. import android.content.ContentResolver;  
  9. import android.database.Cursor;  
  10. import android.graphics.Bitmap;  
  11. import android.net.Uri;  
  12. import android.os.Bundle;  
  13. import android.provider.MediaStore;  
  14. import android.support.v4.app.FragmentActivity;  
  15. import android.support.v4.app.LoaderManager.LoaderCallbacks;  
  16. import android.support.v4.content.CursorLoader;  
  17. import android.support.v4.content.Loader;  
  18. import android.support.v4.widget.SimpleCursorAdapter;  
  19. import android.support.v4.widget.SimpleCursorAdapter.ViewBinder;  
  20. import android.util.Log;  
  21. import android.view.View;  
  22. import android.view.View.OnClickListener;  
  23. import android.view.Window;  
  24. import android.view.WindowManager;  
  25. import android.widget.AdapterView;  
  26. import android.widget.AdapterView.OnItemClickListener;  
  27. import android.widget.BaseAdapter;  
  28. import android.widget.Button;  
  29. import android.widget.ImageView;  
  30. import android.widget.ListView;  
  31. import android.widget.TextView;  
  32.   
  33.   
  34. public class MyDevicePhotoActivity extends FragmentActivity implements LoaderCallbacks<Cursor>{  
  35.     private Bitmap bitmap = null;  
  36.     private byte[] mContent = null;  
  37.     int num=0;  
  38.       
  39.     private ListView listView = null;  
  40.     private SimpleCursorAdapter simpleCursorAdapter = null;  
  41.       
  42.     private static final String[] STORE_IMAGES = {  
  43.         MediaStore.Images.Media.DISPLAY_NAME,  
  44.         MediaStore.Images.Media.LATITUDE,  
  45.         MediaStore.Images.Media.LONGITUDE,  
  46.         MediaStore.Images.Media._ID  
  47.     };  
  48.       
  49.     /** Called when the activity is first created. */  
  50.     @Override  
  51.     public void onCreate(Bundle savedInstanceState) {  
  52.         super.onCreate(savedInstanceState);  
  53.         setContentView(R.layout.main);  
  54.           
  55.         listView = (ListView)findViewById(R.id.list);  
  56.         simpleCursorAdapter = new SimpleCursorAdapter(  
  57.                 this,   
  58.                 R.layout.simple_list_item,   
  59.                 null,   
  60.                 STORE_IMAGES,   
  61.                 new int[] { R.id.item_title},   
  62.                 0  
  63.                 );  
  64.           
  65.         simpleCursorAdapter.setViewBinder(new ImageLocationBinder());  
  66.         Log.i("info", (simpleCursorAdapter==null)+"");  
  67.         listView.setAdapter(simpleCursorAdapter);  
  68.         // 注意此处是getSupportLoaderManager(),而不是getLoaderManager()方法。  
  69.         getSupportLoaderManager().initLoader(0nullthis);  
  70.         // 单击显示图片  
  71.         listView.setOnItemClickListener(new ShowItemImageOnClickListener());  
  72.     }  
  73.       
  74.     @Override  
  75.     public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {  
  76.         // TODO Auto-generated method stub  
  77.         // 为了查看信息,需要用到CursorLoader。  
  78.         CursorLoader cursorLoader = new CursorLoader(  
  79.                 this,   
  80.                 MediaStore.Images.Media.EXTERNAL_CONTENT_URI,   
  81.                 STORE_IMAGES,   
  82.                 null,   
  83.                 null,   
  84.                 null);  
  85.         return cursorLoader;  
  86.     }  
  87.       
  88.     @Override  
  89.     public void onLoaderReset(Loader<Cursor> arg0) {  
  90.         simpleCursorAdapter.swapCursor(null);  
  91.     }  
  92.       
  93.     @Override  
  94.     public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {  
  95.         // 使用swapCursor()方法,以使旧的游标不被关闭.  
  96.         simpleCursorAdapter.swapCursor(cursor);  
  97.     }  
  98.      
  99.     // 将图片的位置绑定到视图  
  100.     private class ImageLocationBinder implements ViewBinder{   
  101.         @Override  
  102.         public boolean setViewValue(View view, Cursor cursor, int arg2) {  
  103.         Log.i("info""setViewValue");  
  104.          
  105.         //此处arg2代表的是STORE_IMAGES数组的索引  
  106.         if(arg2==0){  
  107.         long id=cursor.getLong(3);  
  108.          Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon().appendPath(Long.toString(id)).build();  
  109.          FileUtil file = new FileUtil();  
  110.                   ContentResolver resolver = getContentResolver();  
  111.                   try {  
  112. mContent = file.readInputStream(resolver.openInputStream(Uri.parse(uri.toString())));  
  113. catch (FileNotFoundException e) {  
  114. e.printStackTrace();  
  115. catch (Exception e) {  
  116. e.printStackTrace();  
  117. }  
  118.                   if(mContent!=null)  
  119.                   bitmap = file.getBitmapFromBytes(mContent, null);  
  120.                   if(bitmap!=null)  
  121.                   bitmap=Bitmap.createScaledBitmap(bitmap,getResources().getDisplayMetrics().widthPixels,  
  122.                  getResources().getDisplayMetrics().heightPixels/2true);  
  123.                   ((ImageView)view).setImageBitmap(bitmap);  
  124.                   return true;  
  125.         }  
  126.         return false;  
  127.         }  
  128.     }  
  129.       
  130.     // 单击项显示图片事件监听器  
  131.     private class ShowItemImageOnClickListener implements OnItemClickListener{  
  132.         @Override  
  133.         public void onItemClick(AdapterView<?> parent, View view, int position,  
  134.                 long id) {  
  135.         num=parent.getChildCount();  
  136.             // TODO Auto-generated method stub  
  137.             final Dialog dialog = new Dialog(MyDevicePhotoActivity.this);  
  138.               
  139.             // 以对话框形式显示图片  
  140.             dialog.setContentView(R.layout.image_show);  
  141.             dialog.setTitle("图片显示");  
  142.   
  143.   
  144.             ImageView ivImageShow = (ImageView) dialog.findViewById(R.id.ivImageShow);  
  145.             Button btnClose = (Button) dialog.findViewById(R.id.btnClose);  
  146.               
  147.             btnClose.setOnClickListener(new OnClickListener() {  
  148.                   
  149.                 @Override  
  150.                 public void onClick(View v) {  
  151.                     dialog.dismiss();  
  152.                 }  
  153.             });  
  154.             Log.i("info", id+"+++++++id");  
  155.             Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon().  
  156.                       appendPath(Long.toString(id)).build();  
  157.             FileUtil file = new FileUtil();  
  158.             ContentResolver resolver = getContentResolver();  
  159.               
  160.             // 从Uri中读取图片资源  
  161.             try {  
  162.                 mContent = file.readInputStream(resolver.openInputStream(Uri.parse(uri.toString())));  
  163.                 bitmap = file.getBitmapFromBytes(mContent, null);  
  164.                   
  165.                 //******************************************设置对话框大小****************  
  166.                 Window diaWindow=dialog.getWindow();  
  167.                 WindowManager.LayoutParams lp=diaWindow.getAttributes();  
  168.                 lp.width=MyDevicePhotoActivity.this.getResources().getDisplayMetrics().widthPixels;  
  169.                 lp.height=MyDevicePhotoActivity.this.getResources().getDisplayMetrics().heightPixels/2;  
  170.                 diaWindow.setAttributes(lp);  
  171.                   
  172.                 bitmap=Bitmap.createScaledBitmap(bitmap,lp.width/2,  
  173.                  lp.height/2true);  
  174.                 ivImageShow.setImageBitmap(bitmap);  
  175.             } catch (Exception e) {  
  176.                 // TODO: handle exception  
  177.                 e.printStackTrace();  
  178.             }  
  179.          
  180.             dialog.show();  
  181.         }  
  182.     }  
  183. }  


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值