1. 程式人生 > >android拍攝照片和從相簿裡選擇照片

android拍攝照片和從相簿裡選擇照片

介面佈局:一個照相按鈕,一個從相簿選擇圖片按鈕,一個ImageView用來顯示圖片,程式碼和圖片不再給出


1、用相機拍攝照片並顯示
(解釋見程式碼註釋)

mTakePhotoButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// new一個File用來存放拍攝到的照片
				// 通過getExternalStorageDirectory方法獲得手機系統的外部儲存地址
				File imageFile = new File(Environment
						.getExternalStorageDirectory(), "tempImage.jpg");
				// 如果存在就刪了重新建立
				try {
					if (imageFile.exists()) {
						imageFile.delete();
					}
					imageFile.createNewFile();
				} catch (IOException e) {
					e.printStackTrace();
				}
				// 將儲存地址轉化成uri物件
				imageUri = Uri.fromFile(imageFile);
				// 設定開啟照相的Intent
				Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
				// 設定相片的輸出uri為剛才轉化的imageUri
				intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
				// 開啟相機程式,設定requestCode為TOKE_PHOTO
				startActivityForResult(intent, TAKE_PHOTO);

			}
		});

			startActivityForResult(intent, CROP_PHOTO);

			}
		});

	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		switch (requestCode) {
		// 從拍照介面返回
		case TAKE_PHOTO:
			if (resultCode == RESULT_OK) {
				// 設定intent為啟動裁剪程式
				Intent intent = new Intent("com.android.camera.action.CROP");
				// 設定Data為剛才的imageUri和Type為圖片型別
				intent.setDataAndType(imageUri, "image/*");
				// 設定可縮放
				intent.putExtra("scale", true);
				// 設定輸出地址為imageUri
				intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
				// 開啟裁剪,設定requestCode為CROP_PHOTO
				startActivityForResult(intent, CROP_PHOTO);
			}

			break;
		// 從裁剪介面返回
		case CROP_PHOTO:
			if (resultCode == RESULT_OK) {
				Bitmap bitmap;
				try {
					//通過BitmapFactory將imageUri轉化成bitmap
					bitmap = BitmapFactory.decodeStream(getContentResolver()
							.openInputStream(imageUri));
					//設定顯示
					mPhotoImageView.setImageBitmap(bitmap);
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				}
			}
			
			break;
		default:
			break;
		}
	}


2、從相簿選取照片顯示

按鈕點選的方法

mChoosePhotoButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				//同樣new一個file用於存放照片
				File imageFile = new File(Environment
						.getExternalStorageDirectory(), "outputImage.jpg");
				if (imageFile.exists()) {
					imageFile.delete();
				}
				try {
					imageFile.createNewFile();
				} catch (IOException e) {
					// TODO Auto-generated catch block
				}
				//轉換成Uri
				imageUri = Uri.fromFile(imageFile);
				//開啟選擇呢絨介面
				Intent intent = new Intent("android.intent.action.GET_CONTENT");
				//設定可以縮放
				intent.putExtra("scale", true);
				//設定可以裁剪
				intent.putExtra("crop", true);
				intent.setType("image/*");
				//設定輸出位置
				intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
				//開始選擇
				startActivityForResult(intent, CHOOSE_PHOTO);

			}
		});

	}
本來處理uri時和拍攝照片用的同樣的方法,通過BitmapFactory轉換成bitmap物件,發現不可行,好像是android版本的原因,生成的Path不一樣,然後百度了好久找不到解決方案,最後谷歌瞬間找到很多網頁講述這個的,不得不說以後搜尋還是用谷歌好。先上程式碼

onActivityResult

case CHOOSE_PHOTO:
			if(resultCode==RESULT_OK){
			handleImageOnKitkat(data);
			}
			break;


@TargetApi(Build.VERSION_CODES.KITKAT)
	private void handleImageOnKitkat(Intent data) {
		String imagePath = null;
		Uri uri = data.getData();
		if (DocumentsContract.isDocumentUri(this, uri)) {
			// 如果是document型別的Uri,則通過document id處理
			String docId = DocumentsContract.getDocumentId(uri);
			if ("com.android.providers.media.documents".equals(uri
					.getAuthority())) {
				String id = docId.split(":")[1]; // 解析出數字格式的id
				String selection = MediaStore.Images.Media._ID + "=" + id;
				imagePath = getImagePath(
						MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection);
			} else if ("com.android.providers.downloads.documents".equals(uri
					.getAuthority())) {
				Uri contentUri = ContentUris.withAppendedId(
						Uri.parse("content://downloads/public_downloads"),
						Long.valueOf(docId));
				imagePath = getImagePath(contentUri, null);
			}
		} else if ("content".equalsIgnoreCase(uri.getScheme())) {
			// 如果不是document型別的Uri,則使用普通方式處理
			imagePath = getImagePath(uri, null);
		}
		displayImage(imagePath); // 根據圖片路徑顯示圖片
		System.err.println(imagePath);
	}

	private String getImagePath(Uri uri, String selection) {
		String path = null;
		// 通過uri和selection來獲取真實的圖片路徑
		Cursor cursor = getContentResolver().query(uri, null, selection, null,
				null);
		if (cursor != null) {
			if (cursor.moveToFirst()) {
				path = cursor.getString(cursor
						.getColumnIndex(MediaStore.Images.Media.DATA));
			}
			cursor.close();
		}
		return path;
	}

	private void displayImage(String imagePath) {
		if (imagePath != null) {
			Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
			mPhotoImageView.setImageBitmap(bitmap);
		} else {
			Toast.makeText(this, "failed to get image", Toast.LENGTH_SHORT)
					.show();
		}
	}

目前這段程式碼看的似懂非懂,先存下來,留著進一步學習!

程式截圖




一個多項的dialog的使用

<span style="font-size:14px;">new AlertDialog.Builder(this).setItems(
				new String[] { "拍攝照片", "從相簿選擇" },
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						switch (which) {
						case 0:
							takePhoto();
							break;
						case 1:
							getPhotoFromAlbum();
							break;
						default:
							break;
						}
					}
				}).show();</span><span style="font-size: 18px;">
</span>


相關推薦

android拍攝照片相簿選擇照片

介面佈局:一個照相按鈕,一個從相簿選擇圖片按鈕,一個ImageView用來顯示圖片,程式碼和圖片不再給出 1、用相機拍攝照片並顯示(解釋見程式碼註釋) mTakePhotoButton.setOnClickListener(new OnClickListener(

Android呼叫系統相機拍照,相簿選擇照片,呼叫系統攝像機錄影

最近在Android Studio上折騰程式碼,昨天編譯器又很不給面子的報錯了: Error type 3 Error: Activity class {com.example.myapplication/com.example.myapplication

呼叫攝像頭相簿(呼叫攝像頭拍照相簿選擇圖片)

public class MainActivity extends Activity { public static final int TAKE_PHOTO=1; public static final int CROP_PHOTO=0; public static

Android上傳圖片之調用系統拍照相冊選擇圖片

item 取圖 空指針 ctu setimage tro edate eas tostring Android上傳圖片之調用系統拍照和從相冊選擇圖片 本篇文章已授權

Android拍照相簿獲取圖片(解決android7.0開啟相機崩潰的問題),同時也解決了拍完照後圖片方向不正的問題

再android7.0中相機操作需要動態申請許可權,在點選開啟相機按鈕時要先判斷許可權,沒有許可權要申請,有許可權再操作,同時在申請許可權的回撥方法中也要判斷是否有許可權,有許可權的話再呼叫開啟相機的方法 package test.img.com.myim

Android開發相簿中選取照片

最近專案在做一個功能:就是需要從使用者選擇頭像跳轉到相簿選擇圖片,這應該是一個很簡單的需求,但是在網上搜了一下有好多都講的很亂,其實用幾十行程式碼就可以實現的為什麼要說的那麼複雜呢,下面就簡單說一下嘍。 下面說兩種方法分別是直接選擇相簿返回,另外一種為選擇相簿之

Android-相簿選擇圖片顯示出來

一、選擇圖片 定義Intent跳轉到特定相簿的Uri下挑選,然後將挑選結果返回給Activity 用到startActivityForResult Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Imag

Android相簿選擇圖片並作為Activity的背景(主題)

實現邏輯: 首先獲取本地相簿圖片的絕對路徑URL,儲存; 通過圖片的絕對路徑轉成bitmap; 設背景,結束。 許可權: <uses-permission android:

android---相簿選擇圖片

private ImageView picture; public static final int CHOOSE_PHOTO=2; picture=(ImageView)findViewById(R.id.imageView); run_Permissions();

Android相簿選擇圖片顯示出來

下面的兩篇部落格我是選擇其中的一部分使用的。大家可以自己試試。 第一篇:http://blog.csdn.net/jackyguo1992/article/details/26729107 一、選擇圖片 定義Intent跳轉到特定相簿的Uri下挑選,然後將挑選結果返

android 實現視訊選取功能,包括視訊錄製相簿選取

最近在做一個程式,需要實現視訊上傳的功能,其中有一個地方需要選取視訊,選取視訊的方法有兩種,一種是視訊錄製,一種是從相簿中選取,我現在要實現的功能就是選取這個視訊,其中有一個關鍵的要點就是使用調相簿的方式來選取素材的時候,原本uri返回的是file:///...,但是and

Android拍照相簿選取圖片,相容7.0

首先配置一下我們的專案(1)在build.gradle裡新增類庫:compile 'com.squareup.picasso:picasso:2.5.2'(2)2.1、在清單檔案裡面新增許可權<uses-permission android:name="android.

Android傳送簡訊(簡訊傳送以及群發電話本選擇聯絡人)---簡訊管家2

分析下怎麼寫 首先,我們需要一個輸入框,可以手動的輸入手機號碼, 其次,很少有人願意手動輸入,那麼我們需要提供一個按鈕來給我們的使用者選擇自己電話本中的聯絡人(一次可以選擇多個即群發) 然後,我們需要一個簡訊編輯介面,可以編輯簡訊 最後兩個按鈕,一個傳送,點選後傳送訊息,一個

ionic呼叫照相機或者相簿選擇圖片進行上傳

開發App的時候會經常用到拍照上傳留作憑證,或者從相簿中選擇。 相關外掛: 相機:cordova-plugin-camera 2.4.1 相簿:cordova-plugin-image-picker 1.1.1 檔案:cordova-plugin-file 許可權:cordova-plugi

apicloud相機及相簿上傳圖片並剪下

<template> <div class="chat" style="font-size: 0.16rem"> <img :src=tu /> <div @click="bb">點選上傳圖片</div> &

拍照上傳圖片與相簿選擇圖片上傳

手機拍照與上傳圖片是APP中很常用的功能。 我們先寫個佈局,然後程式碼實現。 MediaStore.ACTION_IMAGE_CAPTURE); //呼叫相機 intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,

上傳檔案之獲取拍照照片本地相簿

// 上傳圖片 private CharSequence[] items = { "選擇本地圖片", "拍照" }; private final int SELECT_LOCAL = 0, SELECT_CAMER = 1, PICTURE_CROP = 2, PI

android相簿選擇圖片拍照選擇圖片

在android開發中選擇圖片的方式大致可以分類兩種,一種是從手機相簿獲取,另外一種則是通過呼叫手機拍照獲得 手機相簿中獲取,這種方式需要讀取儲存卡的許可權 <uses-permission android:name="android.permission.REA

Android中相機拍攝照片,以及相簿選擇圖片壓縮上傳(壓縮後儲存進SD中)(可用於修改頭像等)

           這個功能借鑑了多個大神的,然後整合起來。                    Android中相機拍攝照片,以及相簿選擇圖片壓縮上傳(壓縮後儲存進SD中)(可用   於修改頭像等)                       第一步: privat

選擇相簿照片的時候,取消按鈕確定按鈕都是英文的,如何改成中文的呢??

找到專案中的info.plist,單擊右鍵選擇Show Raw Keys/Values。 之後再單擊右鍵選擇Add Row,名稱填入CFBundleLocalizatons,同時向該陣列加入一個元