1. 程式人生 > >Android呼叫系統相簿和系統相機拍照

Android呼叫系統相簿和系統相機拍照

呼叫系統相機拍照:
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, RESULT_CAMARA_IMAGE); // RESULT_CAMARA_IMAGE:Activity的標誌。自已定義

呼叫系統相簿:  
intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, RESULT_LOAD_IMAGE); // RESULT_LOAD_IMAGE:Activity的標誌。自已定義

    @Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if(resultCode==RESULT_OK && requestCode==TAKE_PICTURE){
			camara(data); //呼叫下面的方法
		}
		
	}

下面是在onActivityResult()中呼叫的兩個方法:

/**
	 * 呼叫系統相簿的操作,在onActivityResult中呼叫
	 * 
	 * @param data
	 *            onActivityResult中的Intent
	 */
	public Bitmap map(Intent data) {
		Uri selectedImage = data.getData();
		String[] filePathColumn = { MediaStore.Images.Media.DATA };
		Cursor cursor = mContext.getContentResolver().query(selectedImage,
				filePathColumn, null, null, null);
		cursor.moveToFirst();
		int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
		String picturePath = cursor.getString(columnIndex);
		cursor.close();
		Log.d("picturePath", picturePath);
		return BitmapFactory.decodeFile(picturePath);
	}

	/**
	 * 呼叫系統相機,在onActivityResult中呼叫,拍照後儲存到sdcard卡中
	 * 
	 * @param data
	 *            onActivityResult中的Intent
	 * @return
	 */
	public Bitmap camara(Intent data) {
		String sdStatus = Environment.getExternalStorageState();
		if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 檢測sd是否可用
			Log.i("TestFile", "SD card is not avaiable/writeable right now.");
			Toast.makeText(mContext,
					"SD card is not avaiable/writeable right now.",
					Toast.LENGTH_LONG).show();
			return null;
		}
		String name = new DateFormat().format("yyyyMMdd_hhmmss",
				Calendar.getInstance(Locale.CHINA))
				+ ".jpg";
		Bundle bundle = data.getExtras();
		Bitmap bitmap = (Bitmap) bundle.get("data");
		FileOutputStream b = null;
		File file = new File("sdcard/DCIM/Camera/");
		file.mkdirs();// 建立資料夾
		String fileName = "sdcard/DCIM/Camera/" + name;
		try {
			b = new FileOutputStream(fileName);
			bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把資料寫入檔案
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} finally {
			try {
				b.flush();
				b.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return bitmap;
	}