手机拍照然后上传图片时,路径不为空为什么总是上传失败啊?但是选择本地相册是成功的,照相之后打印出来的图片路径是/storage/emulated/0/Pictures/1476511270681.jpg。调取照相机的方法用了两种,第一种使用PhotoPicker中的方式;第二种代码如下:
private void takePhoto() {
String SDState = Environment.getExternalStorageState();
if (SDState.equals(Environment.MEDIA_MOUNTED)) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
SimpleDateFormat timeStampFormat = new SimpleDateFormat(
"yyyy_MM_dd_HH_mm_ss");
String filename = timeStampFormat.format(new Date());
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, filename);
photoUri = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
//Log.e("takePhoto", "-------------"+photoUri.toString());
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(intent, SELECT_PIC_BY_CAMERA);
}
}
有没有大神遇到过问题啊?请指点一下吧!
你这样试下,我使用摄像头拍照,是可以取出图片展示的。
public final static int CODE_TAKE_PICTURE = 1111;
private String fileName;
//调用摄像头拍照
public void doTakePicture() {
if (!Environment.getExternalStorageDirectory().exists()) {
Toast.makeText(this, "SD卡不存在,不能拍照", Toast.LENGTH_SHORT).show();
return;
}
String sdcard = Environment.getExternalStorageDirectory().toString();
File file = new File(sdcard + "/camera/");
if (!file.exists()) {
boolean isMade = file.mkdirs();
Log.d("mkDir--", "" + isMade);
}
fileName = String.valueOf(new Date().getTime()) + ".jpg";
File cameraFile = new File(file.getAbsolutePath(), fileName );
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile));
startActivityForResult(cameraIntent ,CODE_TAKE_PICTURE);
setResult(Activity.RESULT_OK, cameraIntent);
}
//传入uri转换为真正路径
public static String getRealFilePath( final Context context, final Uri uri ) {
if( null == uri ) return null;
final String scheme = uri.getScheme();
String data = "";
if( scheme == null )
data = uri.getPath();
else if ( ContentResolver.SCHEME_FILE.equals( scheme ) ) {
data = uri.getPath();
} else if ( ContentResolver.SCHEME_CONTENT.equals( scheme ) ) {
Cursor cursor = context.getContentResolver().query( uri, new String[] { MediaStore.Images.ImageColumns.DATA }, null, null, null );
if ( null != cursor ) {
if ( cursor.moveToFirst() ) {
int index = cursor.getColumnIndex( MediaStore.Images.ImageColumns.DATA );
if ( index > -1 ) {
data = cursor.getString( index );
}
}
cursor.close();
}
}
return data;
}
//在Activity的onActivityResult里面读取拍照照片路径并取出来:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK){
switch (requestCode){
case CODE_TAKE_PICTURE://拍照照片
try {
File mFile = new File(Environment.getExternalStorageDirectory() + "/camera/" + fileName);
Uri mUri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), mFile.getAbsolutePath(), null, null));
String realFilePath = getRealFilePath(this, mUri);//获取真正的图片路径
Log.d("cameraUri", realFilePath);
Bitmap bitmap = BitmapFactory.decodeFile(realFilePath);
}catch (FileNotFoundException e){
e.printStackTrace();
}
break;
default:
break;
}
}
}