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 易做图CursorAdapter = 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);
易做图CursorAdapter = new SimpleCursorAdapter(
this,
R.layout.易做图_list_item,
null,
STORE_IMAGES,
new int[] { R.id.item_title, R.id.item_value},
0
);
易做图CursorAdapter.setViewBinder(new ImageLocationBinder());
listView.setAdapter(易做图CursorAdapter);
// 注意此处是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
易做图CursorAdapter.swapCursor(null);
}
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
// TODO Auto-generated method stub
// 使用swapCursor()方法,以使旧的游标不被关闭.
易做图CursorAdapter.swapCursor(cursor);
}
&
补充:移动开发 , Android ,