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

来源:互联网 发布:mysql数据库主从复制 编辑:程序博客网 时间:2024/05/09 08:17

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.在回调方法中获取图片路径

        /** 回调方法 */@Overrideprotected 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选择图片或拍照图片上传到服务器

0 0
原创粉丝点击