分享

Android实现获取本机中所有图片(使用android-support-v4.jar)

 free_light 2014-08-09

        本示例演示如何在Android中实现获取本机中的所有图片,并进行查看效果。

 

        在这个示例中,我使用android-support-v4.jar中的加载器来实现获取本机中所有图片,关于这个包在以前的文章中也提到,是一个非常有用的包,关于这个包的详细信息请大家查看官方文档:http://developer./sdk/compatibility-library.html。

 

        先让我们看下本示例实现的效果图:

        

        Android实现获取本机中所有图片 Android实现获取本机中所有图片

 

        项目结构图如下所示:

        

        Android实现获取本机中所有图片

 

        MyDevicePhotoActivity.java文件中代码如下:

001package com.device.photo;
002 
003import android.app.Dialog;
004import android.content.ContentResolver;
005import android.database.Cursor;
006import android.graphics.Bitmap;
007import android.net.Uri;
008import android.os.Bundle;
009import android.provider.MediaStore;
010import android.view.View;
011import android.view.View.OnClickListener;
012import android.widget.AdapterView;
013import android.widget.Button;
014import android.widget.ImageView;
015import android.widget.ListView;
016import android.widget.TextView;
017import android.widget.AdapterView.OnItemClickListener;
018 
019import android.support.v4.app.FragmentActivity;
020import android.support.v4.app.LoaderManager.LoaderCallbacks;
021import android.support.v4.content.CursorLoader;
022import android.support.v4.content.Loader;
023import android.support.v4.widget.SimpleCursorAdapter;
024import android.support.v4.widget.SimpleCursorAdapter.ViewBinder;
025 
026/**
027 * Android实现获取本机中所有图片
028 * @Description: Android实现获取本机中所有图片
029 
030 * @FileName: MyDevicePhotoActivity.java
031 
032 * @Package com.device.photo
033 
034 * @Author Hanyonglu
035 
036 * @Date 2012-5-10 下午04:43:55
037 
038 * @Version V1.0
039 */
040public class MyDevicePhotoActivity extends FragmentActivity implements LoaderCallbacks<Cursor>{
041    private Bitmap bitmap = null;
042    private byte[] mContent = null;
043     
044    private ListView listView = null;
045    private SimpleCursorAdapter simpleCursorAdapter = null;
046     
047    private static final String[] STORE_IMAGES = {
048        MediaStore.Images.Media.DISPLAY_NAME,
049        MediaStore.Images.Media.LATITUDE,
050        MediaStore.Images.Media.LONGITUDE,
051        MediaStore.Images.Media._ID
052    };
053     
054    /** Called when the activity is first created. */
055    @Override
056    public void onCreate(Bundle savedInstanceState) {
057        super.onCreate(savedInstanceState);
058        setContentView(R.layout.main);
059         
060        listView = (ListView)findViewById(android.R.id.list);
061        simpleCursorAdapter = new SimpleCursorAdapter(
062                this,
063                R.layout.simple_list_item,
064                null,
065                STORE_IMAGES,
066                new int[] { R.id.item_title, R.id.item_value},
067 
068                );
069         
070        simpleCursorAdapter.setViewBinder(new ImageLocationBinder());
071        listView.setAdapter(simpleCursorAdapter);
072        // 注意此处是getSupportLoaderManager(),而不是getLoaderManager()方法。
073        getSupportLoaderManager().initLoader(0, null, this);
074         
075        // 单击显示图片
076        listView.setOnItemClickListener(new ShowItemImageOnClickListener());
077    }
078     
079    @Override
080    public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
081        // TODO Auto-generated method stub
082        // 为了查看信息,需要用到CursorLoader。
083        CursorLoader cursorLoader = new CursorLoader(
084                this,
085                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
086                STORE_IMAGES,
087                null,
088                null,
089                null);
090        return cursorLoader;
091    }
092     
093    @Override
094    public void onLoaderReset(Loader<Cursor> arg0) {
095        // TODO Auto-generated method stub
096        simpleCursorAdapter.swapCursor(null);
097    }
098     
099    @Override
100    public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
101        // TODO Auto-generated method stub
102        // 使用swapCursor()方法,以使旧的游标不被关闭.
103        simpleCursorAdapter.swapCursor(cursor);
104    }
105     
106    // 将图片的位置绑定到视图
107    private class ImageLocationBinder implements ViewBinder{
108        @Override
109        public boolean setViewValue(View view, Cursor cursor, int arg2) {
110            // TODO Auto-generated method stub
111            if (arg2 == 1) {
112                // 图片经度和纬度
113                double latitude = cursor.getDouble(arg2);
114                double longitude = cursor.getDouble(arg2 + 1);
115                 
116                if (latitude == 0.0 && longitude == 0.0) {
117                    ((TextView)view).setText("位置:未知");
118                } else {
119                    ((TextView)view).setText("位置:" + latitude + ", " + longitude);
120                }
121                 
122                // 需要注意:在使用ViewBinder绑定数据时,必须返回真;否则,SimpleCursorAdapter将会用自己的方式绑定数据。
123                return true;
124            } else {
125                return false;
126            }
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            // TODO Auto-generated method stub
136            final Dialog dialog = new Dialog(MyDevicePhotoActivity.this);
137            // 以对话框形式显示图片
138            dialog.setContentView(R.layout.image_show);
139            dialog.setTitle("图片显示");
140 
141            ImageView ivImageShow = (ImageView) dialog.findViewById(R.id.ivImageShow);
142            Button btnClose = (Button) dialog.findViewById(R.id.btnClose);
143 
144            btnClose.setOnClickListener(new OnClickListener() {
145                 
146                @Override
147                public void onClick(View v) {
148                    dialog.dismiss();
149                }
150                 
151            });
152             
153            Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon().
154                      appendPath(Long.toString(id)).build();
155            FileUtil file = new FileUtil();
156            ContentResolver resolver = getContentResolver();
157             
158            // 从Uri中读取图片资源
159            try {
160                mContent = file.readInputStream(resolver.openInputStream(Uri.parse(uri.toString())));
161                bitmap = file.getBitmapFromBytes(mContent, null);
162                ivImageShow.setImageBitmap(bitmap);
163            } catch (Exception e) {
164                // TODO: handle exception
165                e.printStackTrace();
166            }
167 
168            dialog.show();
169        }
170    }
171}

  FileUtil.java文件主要是对图片资源的处理。代码如下:

01package com.device.photo;
02 
03import java.io.ByteArrayOutputStream;
04import java.io.InputStream;
05 
06import android.graphics.Bitmap;
07import android.graphics.BitmapFactory;
08 
09/**
10 * 文件操作类
11 * @Description: 文件操作类
12 
13 * @FileName: FileUtil.java
14 
15 * @Package com.device.photo
16 
17 * @Author Hanyonglu
18 
19 * @Date 2012-5-10 下午01:37:49
20 
21 * @Version V1.0
22 */
23public class FileUtil {
24    public FileUtil() {
25        // TODO Auto-generated constructor stub
26    }
27     
28    /**
29     * InputStream to byte
30     * @param inStream
31     * @return
32     * @throws Exception
33     */
34    public byte[] readInputStream(InputStream inStream) throws Exception {
35        byte[] buffer = new byte[1024];
36        int len = -1;
37        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
38         
39        while ((len = inStream.read(buffer)) != -1) {
40            outStream.write(buffer, 0, len);
41        }
42         
43        byte[] data = outStream.toByteArray();
44        outStream.close();
45        inStream.close();
46         
47        return data;
48   }
49     
50   /**
51    * Byte to bitmap
52    * @param bytes
53    * @param opts
54    * @return
55    */
56   public Bitmap getBitmapFromBytes(byte[] bytes, BitmapFactory.Options opts) {
57       if (bytes != null){
58           if (opts != null){
59               return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,opts);
60           }
61           else{
62               return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
63           }
64       }
65        
66       return null;
67   }
68}
 最后,希望转载的朋友能够尊重作者的劳动成果,加上转载地址:http://www.cnblogs.com/hanyonglu/archive/2012/05/10/2494908.html,谢谢。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多