aloneGirle 2016-10-15 06:23 采纳率: 42.1%
浏览 1195
已结题

android 调照相机拍照上传时出错问题

手机拍照然后上传图片时,路径不为空为什么总是上传失败啊?但是选择本地相册是成功的,照相之后打印出来的图片路径是/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);
}
}
有没有大神遇到过问题啊?请指点一下吧!

  • 写回答

1条回答 默认 最新

  • 徐福记456 2016-10-15 16:42
    关注

    你这样试下,我使用摄像头拍照,是可以取出图片展示的。
    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;
            }
        }
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 爬虫爬取网站的一些信息
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含
  • ¥15 麒麟V10桌面版SP1如何配置bonding
  • ¥15 Marscode IDE 如何预览新建的 HTML 文件
  • ¥15 K8S部署二进制集群过程中calico一直报错