跳转Activity,调用系统照相机软件拍照获取照片:


<span >	</span>Intent intent_gocamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
<span >			</span>/* 使用当前时间作为新拍的照片的文件名 */
<span >			</span>Calendar c = Calendar.getInstance();<span >	</span>// 获取当前时间状态
<span >			</span>String currentDate = c.get(Calendar.YEAR) + ""
<span >					</span>+ (c.get(Calendar.MINUTE) + 1) + ""
<span >					</span>+ c.get(Calendar.DAY_OF_MONTH) + ""
<span >					</span>+ c.get(Calendar.HOUR_OF_DAY) + "" + c.get(Calendar.MINUTE)
<span >					</span>+ "" + c.get(Calendar.SECOND);
<span >			</span>catchPicName_camera = "WD" + currentDate + ".jpg"; // 拍照保存的图片以.jpg为后缀名
<span >			</span>File filedir = new File(SettingsUtilsTools.getSDPath()+catchPicStoreDir);
<span >			</span>if(!filedir.exists()) {
<span >				</span>filedir.mkdirs();
<span >			</span>}
<span >			</span>File file_catchPic = new File(getSDPath()+catchPicStoreDir, catchPicName_camera);<span >	</span>// 使用<span style="font-family: Arial, Helvetica, sans-serif;">catchPicStoreDir为文件夹名,如“/myimages/”</span>

<span >			</span>Uri uri = Uri.fromFile(file_catchPic);
//<span >			</span>intent01.putExtra(MediaStore.Images.Media.ORIENTATION, 0);
<span >			</span>intent_gocamera.putExtra(MediaStore.EXTRA_OUTPUT, uri);<span >	</span>// 通知照相机将拍照所得的照片存储在该 uri中,若不将拍照的结果存储,则在结果中获取到的回事缩略图
<span >			</span>
<span >			</span>startActivityForResult(intent_gocamera, CASE_CAMERA);




跳转Activity,调用系统的图库浏览器选择图片:


<span >	</span>/* 从图库中选择图片 */
	Intent intent02 = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);// ACTION_OPEN_DOCUMENT
	startActivityForResult(intent02, SELECT_PIC);<span >	</span>// SELECT_PIC的值为启动有返回值的Activity所需的requestCode,可任意自定义数值


在onActivityResult方法中获取返回的图片数据,并将图片传递到另一个Activity中:



<span >		</span>Intent intent_godispose = new Intent("com.go.action.PICHANDLE");
<span >		</span>
<span >		</span>switch (requestCode) {
<span >		</span>case SELECT_PIC:
<span >			</span>Uri uri_pic_back_photo = data.getData();
<span >			</span>try {
<span >				</span>Bitmap bitmap01 = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri_pic_back_photo);
<span >				</span>
<span >				</span>String[] proj = {MediaStore.Images.Media.DATA};
<span >				</span>// 好像是android多媒体数据库的封装接口,具体的看Android文档
<span >				</span>Cursor cursor = managedQuery(uri_pic_back_photo, proj, null, null, null);
<span >				</span>// 按我个人理解 这个是获得用户选择的图片的索引值
<span >				</span>int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
<span >				</span>// 将光标移至开头 ,这个很重要,不小心很容易引起越界
<span >				</span>cursor.moveToFirst();
<span >				</span>// 最后根据索引值获取图片路径
<span >				</span>String path = cursor.getString(column_index);
<span >				</span>String[] pic_ = path.split("/");
<span >				</span>String pic_name = pic_[pic_.length-1];


<span >				</span>Log.e("==>> TAG <<==", path);
<span >				</span>
<span >				</span>intent_godispose.putExtra(TAG_PICPATH, path);
<span >				</span>startActivity(intent_godispose);
<span >			</span>} catch (FileNotFoundException e) {
<span >				</span>e.printStackTrace();
<span >			</span>} catch (IOException e) {
<span >				</span>e.printStackTrace();
<span >			</span>}
<span >			</span>
<span >			</span>break;
<span >		</span>case CASE_CAMERA:
<span >			</span>// Bitmap bitmap = (Bitmap) data.getExtras().get("data"); // 这样获取到的拍照结果是缩略,所以不用这个
<span >			</span>File file_catchPic = new File(SettingsUtilsTools.getSDPath() + catchPicStoreDir, catchPicName_camera);
<span >			</span>
<span >			</span>String path_camera = file_catchPic.getAbsolutePath();
<span >			</span>Log.e("TAG ==>> 拍照结果文件存放路径", path_camera);


//<span >			</span>Intent intent11 = new Intent("com.go.action.PICHANDLE");
<span >			</span>intent_godispose.putExtra(TAG_PICPATH, path_camera);
<span >			</span>startActivity(intent_godispose);


<span >			</span>break;
<span >		</span>default:
<span >			</span>break;
<span >		</span>}
<span >		</span>



其中工具类BitmapUtilsTools下的bitmap2bytes方法如下:


<span >	</span>/**
<span >	</span> * Bitmap转字节流
<span >	</span> * @param bmp
<span >	</span> * @return
<span >	</span> */
<span >	</span>public static byte[] bitmap2bytes(Bitmap bmp, String pic_name) {
<span >		</span>ByteArrayOutputStream baos = new ByteArrayOutputStream();
<span >		</span>String[] args = pic_name.split("\\.");<span >	</span>// 这里注意不能直接使用 split("."),否则无法正确分割,正确的说是不会分割,应该是因为“.”是特殊字符的原因
<span >		</span>
<span >		</span>String suffix = args[args.length-1];<span >	</span>// 获取后缀名名称
<span >		</span>if(suffix.equalsIgnoreCase("JPG")) {
<span >			</span>bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);<span >	</span>// compress()中第二个参数为0时压缩比例最大,100则不压缩
<span >		</span>} else if(suffix.equalsIgnoreCase("PNG")) {
<span >			</span>bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
<span >		</span>}
<span >		</span>return baos.toByteArray();
<span >	</span>}


将图片存储到指定的SD卡目录下:


<span >		</span>Intent intent_godispose = new Intent("com.go.action.PICHANDLE");
		
		switch (requestCode) {
		case SELECT_PIC:
			Uri uri_pic_back_photo = data.getData();
			try {
				Bitmap bitmap01 = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri_pic_back_photo);
				
				String[] proj = {MediaStore.Images.Media.DATA};
				// 好像是android多媒体数据库的封装接口,具体的看Android文档
				Cursor cursor = managedQuery(uri_pic_back_photo, proj, null, null, null);
				// 按我个人理解 这个是获得用户选择的图片的索引值
				int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
				// 将光标移至开头 ,这个很重要,不小心很容易引起越界
				cursor.moveToFirst();
				// 最后根据索引值获取图片路径
				String path = cursor.getString(column_index);
				String[] pic_ = path.split("/");
				String pic_name = pic_[pic_.length-1];

				Log.e("==>> TAG <<==", path);
				
				intent_godispose.putExtra(TAG_PICPATH, path);<span >	</span>// 将图片的路径传到另一个Activity
				startActivity(intent_godispose);
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
			
			break;
		case CASE_CAMERA:
			// Bitmap bitmap = (Bitmap) data.getExtras().get("data"); // 获取拍照后的结果——缩略图
			File file_catchPic = new File(SettingsUtilsTools.getSDPath() + catchPicStoreDir, catchPicName_camera);
			
			String path_camera = file_catchPic.getAbsolutePath();
			Log.e("TAG ==>> 拍照结果文件存放路径", path_camera);

//			Intent intent11 = new Intent("com.go.action.PICHANDLE");
			intent_godispose.putExtra(TAG_PICPATH, path_camera);
			startActivity(intent_godispose);

			break;
		default:
			break;
		}


其中获取SD卡绝对路径的方法getSDPath()如下:


/**
	 * 获取SD卡在手机上的路径
	 * @return
	 */
	public static String getSDPath() {
		File sdDir = null;
		boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED); // 判断sd卡是否存在
		if (sdCardExist) {
			sdDir = Environment.getExternalStorageDirectory();// 获取跟目录
		}
		return sdDir.toString();
	}