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
- android 下获取手机所有照片
- android 下获取手机所有照片
- 获取手机系统中的所有照片
- Android,一个猥琐的获取妹子手机相机里所有照片的办法...
- android获取手机所有图片
- iOS获取所有照片
- 获取手机照片
- 获取手机照片UIImagePickerViewController
- Android笔记之获取手机图库照片和拍照获取照片
- Android 获取手机相册照片,返回并展示
- 获取照片库中所有照片
- 获取Android手机中所有的短信
- 获取Android手机中所有的短信
- android 获取手机所有短信内容
- 获取Android手机中所有的短信
- 获取Android手机中所有的短信
- 获取Android手机中所有的短信
- 获取Android手机中所有的短信
- OpenRisc-62-ML501从CF卡启动u-boot
- 常用图像处理C函数
- 【九度】题目1187:最小年龄的3个职工
- Android.mk
- V4L2最简单驱动实例
- android 下获取手机所有照片
- java教程(一)JDK环境配置
- 手机日常维护小知识
- math.random的取值范围
- linux website
- linux下SVN服务的搭建与配置
- 合并两个已排序单链表
- OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解
- linux 命令 之 sed awk