Camera Intent无法在我的代码中工作

时间:2016-10-01 16:13:06

标签: android android-activity camera imageview

我正在尝试使用从相机和图库接收的结果数据设置图像视图。

我有4个ImageView,因此根据所选的图像视图请求代码更改...并将其分配给此捕获和图库变量。

private  void picselect(int capture, int gallery) {
    final CharSequence[] items = {"Take Photo", "Choose from Library",
            "Cancel"};

    a=capture;
    b=gallery;
    AlertDialog.Builder builder = new AlertDialog.Builder(
            EditProfile.this);
    builder.setItems(items, new DialogInterface.OnClickListener() {


        @Override
        public void onClick(DialogInterface dialog, int item) {
            if (items[item].equals("Take Photo")) {
                Calendar cal = Calendar.getInstance();
                File file = new File(Environment.getExternalStorageDirectory(),
                        (cal.getTimeInMillis() + ".jpg"));
                if (!file.exists()) {
                    try {
                        file.createNewFile();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } else {

                    file.delete();
                    try {
                        file.createNewFile();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                uricam = Uri.fromFile(file);
                Intent takePicture = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                Log.d("shanOutput", String.valueOf(uricam));
                 takePicture.putExtra(MediaStore.EXTRA_OUTPUT, uricam);
                startActivityForResult(takePicture,a);


            } else if (items[item].equals("Choose from Library")) {

                Intent photoPic = new Intent(Intent.ACTION_PICK,
                        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                startActivityForResult(photoPic,b);


            } else if (items[item].equals("Cancel")) {
                dialog.dismiss();
            }
        }
    });
    builder.show();

}

private String getRealPathFromURI(Uri contentURI) {
    String result;
    Cursor cursor = getContentResolver().query(contentURI, null,
            null, null, null);

    if (cursor == null) { 

        result = contentURI.getPath();
    } else {
        cursor.moveToFirst();
        int idx = cursor
                .getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        result = cursor.getString(idx);
        cursor.close();
    }
    return result;
}

这是我在onActivityResult

中编写的代码
 if (resultCode == RESULT_OK) {

                if(imageReturnedIntent!=null){
                    Uri selectedImage = imageReturnedIntent.getData();
                    if(selectedImage!=null){

                        profileImage.setImageURI(selectedImage);}
                    sendImageToServer( String.valueOf(getRealPathFromURI(selectedImage)),1);

                    Log.d("shanImage", String.valueOf(getRealPathFromURI(selectedImage)));
                }


            }

从Gallery接收图片工作正常,但该部分返回null。我的代码中缺少什么。有人可以指导我完成这个模块。

1 个答案:

答案 0 :(得分:0)

ACTION_IMAGE_CAPTURE未通过Uri传递给Intent返回onActivityResult()

由于您使用的是EXTRA_OUTPUT,因此您知道图片的位置:放在EXTRA_OUTPUT的位置。所以,看看你的形象。

This sample application演示了EXTRA_OUTPUT的使用。特别是,它使用FileProvider,因为一旦Uri.fromFile()升至24或更高,您就无法在Android 7.0及更高版本的设备上使用targetSdkVersion