//拍照 public void pickImageFromCamera(){ String state = Environment.getExternalStorageState(); if (state.equals(Environment.MEDIA_MOUNTED)) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); if (!file.exists()) { file.mkdirs(); } mFile = new File(file, System.currentTimeMillis() + ".jpg"); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mFile)); intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, CUT_PHOTO); startActivityForResult(intent, TAKE_PHOTO); } else { Toast.makeText(this, "请确认已经插入SD卡", Toast.LENGTH_SHORT).show(); } } //从相册获取图片 public void pickImageFromAlbum(){ Intent picIntent = new Intent(Intent.ACTION_PICK, null); picIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(picIntent, CHOOSE_PHOTO); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { switch (requestCode) { case TAKE_PHOTO: startPhotoZoom(Uri.fromFile(mFile)); break; case CHOOSE_PHOTO: if (data == null || data.getData() == null) { return; } try { Bitmap bm = null; Uri originalUri = data.getData(); //获得图片的uri bm = MediaStore.Images.Media.getBitmap(getContentResolver(), originalUri); //显得到bitmap图片 //这里开始的第二部分,获取图片的路径: String[] proj = {MediaStore.Images.Media.DATA}; //好像是android多媒体数据库的封装接口,具体的看Android文档 Cursor cursor = managedQuery(originalUri, proj, null, null, null); //按我个人理解 这个是获得用户选择的图片的索引值 int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); //将光标移至开头 ,这个很重要,不小心很容易引起越界 cursor.moveToFirst(); //最后根据索引值获取图片路径 path = cursor.getString(column_index); }catch (Exception e){ e.printStackTrace(); } startPhotoZoom(data.getData()); break; case CUT_PHOTO: if (data != null) { setPicToView(data); } break; } } } /** * 打开系统图片裁剪功能 * * @param uri uri */ private void startPhotoZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", true); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", 300); intent.putExtra("outputY", 300); intent.putExtra("scale", true); //黑边 intent.putExtra("scaleUpIfNeeded", true); //黑边 intent.putExtra("return-data", true); intent.putExtra("noFaceDetection", true); startActivityForResult(intent, CUT_PHOTO); } private void setPicToView(Intent data) { Bundle bundle = data.getExtras(); if (bundle != null) { // // Uri selectedImage = data.getData(); // // String[] filePathColumn = { MediaStore.Images.Media.DATA }; // // Cursor cursor = getContentResolver().query(selectedImage, // filePathColumn, null, null, null); // cursor.moveToFirst(); // // int columnIndex = cursor.getColumnIndex(filePathColumn[0]); // String picturePath = cursor.getString(columnIndex); // //这里也可以做文件上传 mBitmap = bundle.getParcelable("data"); // ivHead.setImageBitmap(mBitmap); ceshi.setImageBitmap(mBitmap); // // if (picturePath!=null){ // path = picturePath; // } if(mFile != null){ path = mFile.getPath(); } Toast.makeText(GeRenXinXi.this,"path:"+path,Toast.LENGTH_SHORT).show(); final BmobFile bmobFile = new BmobFile(new File(path)); bmobFile.uploadblock(new UploadFileListener() { @Override public void done(BmobException e) { if (e == null) { Toast.makeText(GeRenXinXi.this, "pic is success", Toast.LENGTH_SHORT).show(); // MyUser myUser =MyUser.getCurrentUser(MyUser.class); //得到上传的图片地址 String fileUrl = bmobFile.getFileUrl(); user.setTouxiang(bmobFile); //更新图片地址 user.update(user.getObjectId(), new UpdateListener() { @Override public void done(BmobException e) { if (e == null) { Toast.makeText(GeRenXinXi.this, "update", Toast.LENGTH_SHORT).show(); } } }); }else { Toast.makeText(GeRenXinXi.this, "shibai"+e.getMessage(), Toast.LENGTH_SHORT).show(); tv_xingbie.setText(e.getMessage()); } } }); } }