Android笔记之获取手机图库照片和拍照获取照片
2014-11-07 17:38
429 查看
1.从相册中获取取图片
2.拍照获取图片
3.在回调方法中获取图片路径
参考文献
Android选择图片或拍照图片上传到服务器
/** 从相册中取图片 */ 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选择图片或拍照图片上传到服务器
相关文章推荐
- android相机、图库获取照片,并实现两个手机对图像进行放大,缩小功能
- Android从本地获取照片以及调用手机拍照功能的方法
- mono for android 获取手机照片或拍照并裁剪保存
- Android--使用手机拍照获取图片路径,小米手机选择照片问题处理
- android 适配8.0。6.0调起手机拍照获取照片路径
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时回到手机桌面,然后才会跳转到当前activity
- mono for android 获取手机照片或拍照并裁剪保存
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时回到手机桌面,然后才会跳转到当前activity
- android调用照相机拍照获取照片并做简单剪裁
- android调用照相机拍照获取照片并做简单剪裁
- Android菜鸟笔记-调用相机拍照后返回照片过小的问题
- 如何获得android手机拍照后照片的存放目录
- Android调用手机拍照以及从相册选择照片
- Android调用手机拍照以及从相册选择照片
- Android开发之获取相册照片和获取拍照照片三之 图片旋转
- android没有插SD卡/TF卡(TF卡其实就是microSD卡)时的图库(拍照的照片)里图片的保存路径(位置)
- Android调用手机拍照以及从相册选择照片,剪裁
- Android调用手机拍照以及从相册选择照片 不指定
- android 实现调用相机拍照 获取照片路径并上传
- android获得手机照片,摄像,拍照,录音等功能并将其转为字符串