您的位置:首页 > 移动开发 > Android开发

Android笔记之获取手机图库照片和拍照获取照片

2014-11-07 17:38 429 查看
1.从相册中获取取图片

/** 从相册中取图片 */
private void pickPhoto() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO);
}


2.拍照获取图片

/** 拍照获取图片 */
private void takePhoto() {
String state = Environment.getExternalStorageState(); // 判断是否存在sd卡
if (state.equals(Environment.MEDIA_MOUNTED)) { // 直接调用系统的照相机
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO);
} else {
Toast.makeText(BrowsePictureDialogReplaceActivity.this,
"请检查手机是否有SD卡", Toast.LENGTH_LONG).show();
}
}


3.在回调方法中获取图片路径

/** 回调方法 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SELECT_PIC_BY_TACK_PHOTO) {
// 两种方式获得拍摄照片的返回值
Uri uri = data.getData();
if (uri != null) {
photo = BitmapFactory.decodeFile(uri.getPath());
}
if (photo == null) {
Bundle bundle = data.getExtras();
if (bundle != null) {
photo = (Bitmap) bundle.get("data");
savePicInLocal = SavePicInLocal(photo);
picPath = savePicInLocal.getPath();
if (photo != null && !photo.isRecycled()) {
photo.recycle();
photo = null;
}
} else {
Toast.makeText(BrowsePictureDialogReplaceActivity.this,
"未拍摄照片", Toast.LENGTH_LONG).show();
}
}
//上传图片
uploadPath(picPath);
finish();
} else if (requestCode == SELECT_PIC_BY_PICK_PHOTO) {
doPhoto(requestCode, data);
//上传图片
uploadPath(picPath);
}
super.onActivityResult(requestCode, resultCode, data);
}
/** 保存拍摄的照片到手机的sd卡 */
private File SavePicInLocal(Bitmap bitmap) {
FileOutputStream fos = null;
BufferedOutputStream bos = null;
ByteArrayOutputStream baos = null; // 字节数组输出流
try {
baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);

byte[] byteArray = baos.toByteArray();// 字节数组输出流转换成字节数组
// Log.i("geek", "本地的raw的文件的二进制GetPictureData="
// + GetPictureData().toString());
Log.i("geek", "本地的raw的文件的二进制byteArray=" + byteArray.toString());
saveDir = Environment.getExternalStorageDirectory() + "/liangPic";
File dir = new File(saveDir);
if (!dir.exists()) {
dir.mkdirs(); // 创建文件夹
}
fileName = saveDir + "/" + System.currentTimeMillis() + ".jpg";
file = new File(fileName);
file.delete();
if (!file.exists()) {
file.createNewFile();// 创建文件
Log.i("PicDir", file.getPath());
// Toast.makeText(PersonalEditUserInfo.this, fileName + "保存成功",
// 1000).show();
}
Log.i("PicDir", file.getPath());
// 将字节数组写入到刚创建的图片文件中
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos);
bos.write(byteArray);

} catch (Exception e) {
e.printStackTrace();

} finally {
if (baos != null) {
try {
baos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (bos != null) {
try {
bos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return file;
}

}

/** 选择图片后,获取图片的路径 */
private void doPhoto(int requestCode, Intent data) {
if (requestCode == SELECT_PIC_BY_PICK_PHOTO) // 从相册取图片,有些手机有异常情况,请注意
{
if (data == null) {
Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show();
return;
}
photoUri = data.getData();
if (photoUri == null) {
Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show();
return;
}
}
String[] pojo = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(photoUri, pojo, null, null, null);
if (cursor != null) {
int columnIndex = cursor.getColumnIndexOrThrow(pojo[0]);
cursor.moveToFirst();
picPath = cursor.getString(columnIndex);
cursor.close();
}
Log.i(TAG, "imagePath = " + picPath);
if (picPath != null
&& (picPath.endsWith(".png") || picPath.endsWith(".PNG")
|| picPath.endsWith(".jpg") || picPath.endsWith(".JPG"))) {
lastIntent.putExtra(KEY_PHOTO_PATH, picPath);
setResult(Activity.RESULT_OK, lastIntent);
finish();
} else {
Toast.makeText(this, "选择图片文件不正确", Toast.LENGTH_LONG).show();
}
}


参考文献
Android选择图片或拍照图片上传到服务器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐