当前位置:操作系统 > 安卓/Android >>

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

本示例演示如何在Android中使用加载器(Loader)来实现获取本机中的所有图片,并进行查看图片的效果。

 

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

 

  关于加载器(Loader)是在Android3.0中才开始引进并使用的,Android3.0以前的版本中要想使用加载器则需要用android-support-v4.jar来实现,我这个示例是基于Android2.2的。加载器(Loader)有什么作用呢?官方文档介绍是:它能够使用得在activity或fragment中异步加载数据变得更加容易,它具有以下的特点:

  1.它们对每一个Activity和Fragment都是有效的。

  2.它们提供了一种异步加载数据的能力。

  3.它们监视数据源并且数据内容改变时将会传递新的结果。

  4.当配置改变而被重新创建时,它们自动的会重连到上一个加载器的游标,然而,它们不需要重新查询数据。

 

  我会结合下面的代码逐步介绍加载器(Loader)相关类及使用方法。下面先让我们看下本示例实现的效果图:
  
   
 
  左边的图是显示本机中所有的图片列表,右边的图则是点击一项时查看图片。
 
  项目结构图如下所示:
  
 
  创建项目时我们需要引入android-support-v4.jar包。
 
  MyDevicePhotoActivity.java文件中代码如下:
 

 

package com.device.photo;

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.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

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;

/**
 * Android实现获取本机中所有图片
 * @Description: Android实现获取本机中所有图片

 * @FileName: MyDevicePhotoActivity.java

 * @Package com.device.photo

 * @Author Hanyonglu

 * @Date 2012-5-10 下午04:43:55

 * @Version V1.0
 */
public class MyDevicePhotoActivity extends FragmentActivity implements LoaderCallbacks<Cursor>{
    private Bitmap bitmap = null;
    private byte[] mContent = null;
   
    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(android.R.id.list);
        simpleCursorAdapter = new SimpleCursorAdapter(
                this,
                R.layout.simple_list_item,
                null,
                STORE_IMAGES,
                new int[] { R.id.item_title, R.id.item_value},
                0
                );
       
        simpleCursorAdapter.setViewBinder(new ImageLocationBinder());
        listView.setAdapter(simpleCursorAdapter);
        // 注意此处是getSupportLoaderManager(),而不是getLoaderManager()方法。
     // 在Android3.0中是使用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) {
        // TODO Auto-generated method stub
        simpleCursorAdapter.swapCursor(null);
    }
   
    @Override
    public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
        // TODO Auto-generated method stub
        // 使用swapCursor()方法,以使旧的游标不被关闭.
        simpleCursorAdapter.swapCursor(cursor);
    }
   
 &

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,