Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 利用intent MediaStore.EXTRA_输出的数据_Android_Io_Uri - Fatal编程技术网

Android 利用intent MediaStore.EXTRA_输出的数据

Android 利用intent MediaStore.EXTRA_输出的数据,android,io,uri,Android,Io,Uri,我一直在试图从一个摄像头函数中保存我的Uri数据,但我没有运气。我已经使用了几个关于stackoverflow的例子,但仍然不明白我做错了什么。onActivityResult中的意图数据为空,因为相机活动正在破坏我正在使用的主活动。我试图将其保存在SaveInstanceState中,但仍然为空。我错过了什么 以下是saveInstanceState: @Override protected void onSaveInstanceState(Bundle state){ su

我一直在试图从一个摄像头函数中保存我的Uri数据,但我没有运气。我已经使用了几个关于stackoverflow的例子,但仍然不明白我做错了什么。onActivityResult中的意图数据为空,因为相机活动正在破坏我正在使用的主活动。我试图将其保存在SaveInstanceState中,但仍然为空。我错过了什么

以下是saveInstanceState:

    @Override
protected void onSaveInstanceState(Bundle state){

    super.onSaveInstanceState(state);
    if (mImageData != null) {
        state.putString("cameraImageUri", mImageData.toString());
    }
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    if (savedInstanceState.containsKey("cameraImageUri")) {
        mImageData = Uri.parse(savedInstanceState.getString("cameraImageUri"));
    }
}
以下是意图设置和文件创建者:

    private void dispatchTakePictureIntent() {

    log("in dispatchTakePictureIntent()");
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    // Ensure that there's a camera activity to handle the intent

    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        // Create the File where the photo should go
        File photoFile = null;
        try {
            photoFile = createImageFile();
        } catch (IOException ex) {
            // Error occurred while creating the File
            log("Exception caught.  Aborting image creation" + ex);
        }
        // Continue only if the File was successfully created
        if (photoFile != null) {
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                    Uri.fromFile(photoFile));
            mImageData = takePictureIntent.getData();  //Trying to save the data.
            startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
        }
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    log("in onActivityResult()");
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == 1 && resultCode == RESULT_OK){

        //Intent data is null right here.
        Uri selectedImage = data.getData();
        ImageView photo = (ImageView) findViewById(R.id.imageView1);
        Bitmap mBitmap = null;

        try
        {
            mBitmap = Media.getBitmap(this.getContentResolver(), selectedImage);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }

        SelfieObject selfie = new SelfieObject(mCurrentPhotoPath, photo);
        startNotification();

        //method call for ListViewAdapter.add
        //addNewPic(selfie);
    }
}

private File createImageFile() throws IOException {

    log("in createImageFile()");
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = "JPEG_" + timeStamp + "_";
    File storageDir = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
        imageFileName,  /* prefix */
        ".jpg",         /* suffix */
        storageDir      /* directory */
    );

    // Save a file: path for use with ACTION_VIEW intents
    mCurrentPhotoPath = "file:" + image.getAbsolutePath();
    return image;
}

public void addNewPic(SelfieObject selfie){

    log("in addNewPic()");

    mAdapter.add(selfie);
}

我不知道这是否还与你有关,但我会试试看

不清楚你想做什么。当您请求拾取图像时,所拾取图像的uri将在意图数据中可用。当你有一个用相机拍照的请求时,由你决定保存在哪里。代码中的这一行:

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
因此,在这种情况下,您的意图数据中总是会得到null,因为您不需要它:照片保存在任何uriphotofile中

您显然不需要这一行:

mImageData = takePictureIntent.getData();  //Trying to save the data
。。。而且也没有必要将其保存在onSaveInstanceState中


我希望有帮助。祝你好运

这就是我最后做的。我会将此检查为已接受,因为其他人可能也需要帮助。谢谢