android获取本地图片或拍照图片

直接上代码,代码中注释很清楚,本人觉得这个东西google本来自己就应该集成好,直接一个方法调用最好,因为这个用的比较多,一般的android手机中交流的软件基本上都需要这个东西。

package com.example.photodemo;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {

	private ImageView image;// 要显示选择的图片
	private Bitmap photo;// 选择好的图片的bitmap形式
	
	private Button button1;// 图片
	private Button button2;// 拍照
	private static final int PIC = 1;// 图片
	private static final int PHO = 2;// 照相

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_main);
		button1 = (Button) findViewById(R.id.button1);
		button2 = (Button) findViewById(R.id.button2);
		image = (ImageView) findViewById(R.id.imageView1);
		button1.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setType("image/*");
				intent.setAction(Intent.ACTION_GET_CONTENT);
				startActivityForResult(intent, PIC);
			}
		});
		// 拍照上传
		button2.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				String state = Environment.getExternalStorageState();
				if (state.equals(Environment.MEDIA_MOUNTED)) {// 如果存储卡可用
					Intent intent = new Intent(
							"android.media.action.IMAGE_CAPTURE");
					startActivityForResult(intent, PHO);
				} else {
					Toast.makeText(getApplicationContext(), "存储卡不可用",
							Toast.LENGTH_LONG).show();
				}
			}
		});
	}

	/**
	 * 取得回传的数据
	 */
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (data != null && requestCode == PHO) { // 拍照上传时
			Bundle extras = data.getExtras();
			if (extras != null) {
				photo = (Bitmap) extras.get("data");
				image.setImageBitmap(photo);
			} else {
				Toast.makeText(MainActivity.this, "未找到图片", Toast.LENGTH_LONG)
						.show();
			}
		}
		if (resultCode == Activity.RESULT_OK) {
			Uri uri = data.getData();// 当选择的图片不为空的话,在获取到图片的途径
			try {
				String[] pojo = { MediaStore.Images.Media.DATA };
				Cursor cursor = managedQuery(uri, pojo, null, null, null);
				if (cursor != null) {
					ContentResolver cr = this.getContentResolver();
					int colunm_index = cursor
							.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
					cursor.moveToFirst();
					String path = cursor.getString(colunm_index);
					/***
					 * 这里加这样一个判断主要是为了第三方的软件选择,比如:使用第三方的文件管理器的话,你选择的文件就不一定是图片了,
					 * 这样的话,我们判断文件的后缀名 如果是图片格式的话,那么才可以
					 */
					if (path.endsWith("jpg") || path.endsWith("png")) {
						photo = BitmapFactory.decodeStream(cr
								.openInputStream(uri));
						image.setImageBitmap(photo);
					} else {
					}
				} else {
				}
			} catch (Exception e) {
			}
		}
	}
}

布局也顺便写一下吧



    


作者:Wang6279026 发表于2013-2-20 21:31:21 原文链接
阅读:71 评论:0 查看评论

你可能感兴趣的:(android,图片,拍照)