我拍照时,bundle键返回null

时间:2018-10-21 14:46:59

标签: android

我正在使用ro意图从相机捕获图像:

public void takePhoto(View view) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
         try {

             Bundle bundle = new Bundle();
             f = createImageFile(); // creates a new image file into which I want to store the photo
             bundle.putString( "currentPhotoPath", f.getAbsolutePath() );
             intent.putExtras(bundle);
             startActivityForResult(intent, CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE);

        } 
        catch (IOException e) {
            e.printStackTrace();
        }        
    }

f.createImageFile创建一个空的Image对象,我要将在其中存储从相机拍摄的照片。我试图将这个图像对象的路径传递给捆绑包,如下所示:

bundle.putString( "currentPhotoPath", f.getAbsolutePath() );

然后我使用以下代码获取结果:

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

            super.onActivityResult(requestCode, resultCode, data);
            if(requestCode == CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE ) {
                Bundle bundle = data.getExtras();
                String currentPhotoPath = bundle.getString("currentPhotoPath");
                File takenPhoto = new File("currentPhotoPath");

                if (resultCode == RESULT_OK) {
                   if(takenPhoto.length() <= 0) {
                       takenPhoto.delete();
                   }
                   this.checkForUploads();
                }
                else if(resultCode == RESULT_CANCELED) {
                    takenPhoto.delete();
                } 
            }       
        }

我期望在data.getExtras()中找到键“ currentPhotoPath”,该键保存指向新Image对象的路径,但始终为null。相反,我得到的唯一键是我认为它包含实际位图数据的数据。 我已经看到类似的问题,所以我认为我做对了。

1 个答案:

答案 0 :(得分:1)

  

我也看到了类似的问题,所以我认为我做对了。

抱歉,没有。

您放入Intent的其他地方去了Intent的地方。就您而言,它涉及一些具有ACTION_IMAGE_CAPTURE <intent-filter>的活动。该代码的额外功能取决于该活动的开发人员。在您的情况下,由于您自己发明了一个新的Intent附加项,因此您的附加项将被忽略,因为ACTION_IMAGE_CAPTURE活动的开发人员将不愿寻找它。

传递给Intent的{​​{1}}与onActivityResult()使用的Intent完全不同。特别是,您不需要将startActivityForResult() startActivityForResult()上放置的其他内容包含在其他应用的Intent响应中。