如何获取图像上传服务器的真实路径成为奇巧的崩溃

时间:2018-07-26 13:27:02

标签: android

MDTupleTypedArrayWrapper

2 个答案:

答案 0 :(得分:0)

尝试

private String getRealPathFromURI(String contentURI) {
            Uri contentUri = Uri.parse(contentURI);
            Cursor cursor = mContext.getContentResolver().query(contentUri, null, null, null, null);
            if (cursor == null) {
                return contentUri.getPath();
            } else {
                cursor.moveToFirst();
                int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
                String str = cursor.getString(index);
                cursor.close();
                return str;
            }

        }

选中此

@SuppressLint("NewApi")
    public static String getRealPathFromURI(Context context, Uri uri) {
        String filePath = "";
        String wholeID = DocumentsContract.getDocumentId(uri);

        // Split at colon, use second item in the array
        String id = wholeID.split(":")[1];
        String[] column = {MediaStore.Images.Media.DATA};

        // where id is equal to
        String sel = MediaStore.Images.Media._ID + "=?";
        Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column, sel, new String[]{id}, null);
        int columnIndex = cursor.getColumnIndex(column[0]);
        if (cursor.moveToFirst()) {
            filePath = cursor.getString(columnIndex);
        }
        cursor.close();
        return filePath;
    }

从相机获取URI

    private Uri capturedUri;


    public void openCamera() {
        Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        // Create the File where the photo should go
        File photoFile = null;
        try {
            photoFile = createMediaFile(1);
        } catch (IOException ex) {
        }

        // Continue only if the File was successfully created
        if (photoFile != null) {
            capturedUri = null;
            capturedUri = Uri.fromFile(photoFile);
            takePicture.putExtra(MediaStore.EXTRA_OUTPUT, capturedUri);
            startActivityForResult(takePicture, 1);
        }
    }


   @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            if (requestCode == 1) {
                if ((null == data) || (data.getData() == null)) {
                    try {
                        Bitmap photo = MediaStore.Images.Media.getBitmap(getContentResolver(), capturedUri);
                        img_profileimage.setImageBitmap(photo);
                        capturedUri = getImageUri(context, photo);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } else {
                    Toast.makeText(context, context.getResources().getString(R.string.some_thing_went_wrong), Toast.LENGTH_SHORT);
                }
            } else if (requestCode == 2) {
                if (data.getData() != null) {
                    //  Uri selectedImage = data.getData();
                    capturedUri = null;
                    capturedUri = data.getData();

                } else {
                    Toast.makeText(context, context.getResources().getString(R.string.some_thing_went_wrong), Toast.LENGTH_SHORT);
                }
            }
        }
    }


    public Uri getImageUri(Context inContext, Bitmap inImage) {
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        String picturePath = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Image", null);
        return Uri.parse(picturePath);
    }


    public File createMediaFile(int type) throws IOException {
        // Create an image file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String fileName = type == 1 ? "JPEG_" + timeStamp + "_" : "VID_" + timeStamp + "_";
        File storageDir = Environment.getExternalStoragePublicDirectory(type == 1 ? Environment.DIRECTORY_PICTURES : Environment.DIRECTORY_MOVIES);
        File file = File.createTempFile(fileName,  /* prefix */type == 1 ? ".jpg" : ".mp4",/* suffix */storageDir/* directory */);
        return file;
    }

答案 1 :(得分:0)

public static String getFilePathByUri(Context context, Uri uri) {

    String fileName = "";
    Uri filePathUri = uri;

    if (uri.getScheme().toString().compareTo("content") == 0) {

        Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);

        if (cursor.moveToFirst()) {
            int column_index = cursor.getColumnIndexOrThrow("_data");
            filePathUri = Uri.parse(cursor.getString(column_index));
            fileName = filePathUri.getEncodedPath();
        }

        cursor.close();

    } else if (uri.getScheme().compareTo("file") == 0) {
        fileName = filePathUri.getEncodedPath();
    } else {
        fileName = fileName + "_" + filePathUri.getLastPathSegment();
    }
    return fileName;
}