“putExtra”如何运作?

时间:2013-12-30 19:59:43

标签: android android-intent

我正在关注这个例子:

http://developer.android.com/training/camera/photobasics.html

如果你为这个putExtra(MediaStore.EXTRA_OUTPUT按Ctrl-F,它会带你到我不确定的一段代码。进一步在应用程序中,他们覆盖onActivityResult并尝试将此意图中的图像从活动结果中拉出以显示在应用程序中,但是当我这样做时,onActivityResult中的Intent arg为null 。我尝试将putExtra更改为"data"而不是MediaStore.EXTRA_OUTPUT,突然之间它完美无缺。

任何人都可以解释本教程试图让我做的事情吗?

基本上,有问题的代码:

static final int REQUEST_IMAGE_CAPTURE = 1;

private void 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
            ...
        }
        // Continue only if the File was successfully created
        if (photoFile != null) {
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                    Uri.fromFile(photoFile));
            startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
        }
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap) extras.get("data");
        mImageView.setImageBitmap(imageBitmap);
    }
}
Intent data中的

onActivityResult为空,因此当我调用getExtras时它会崩溃。我将dispatchTakePictureIntent更改为putExtra("data", Uri.fromFile(photoFile));并且有效。

如果这是Google的一个大错并且在他们的教程中犯了错误,或者我做错了什么/不明白,我只是感到困惑?我之所以做出此更改,只是因为它在调用data时使用字符串extras.get("data")。所以我甚至不理解我的解决方案:(

1 个答案:

答案 0 :(得分:1)

putExtra("NameOfExtra", object)

所以他们得到了额外的名字"数据" - 字符串是之前放置的额外值的名称。