android camera:onActivityResult()如果有额外的,则intent为null

dvr*_*vrm 37 android android-camera-intent

在Stack Overflow中搜索了所有相关问题但没有找到任何内容后,请尽量帮助我.

我创建了捕获图片的意图.然后我看到了不同的行为onActivityResult():如果我没有在Intent中添加任何额外的内容(对于小图片)onActivityResult中的Intent是可以的,但是当我在将pic写入文件的意图中添加额外内容时,onActivityResult中的意图是null!

意图创作:

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// without the following line the intent is ok
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
startActivityForResult(takePictureIntent, actionCode);
Run Code Online (Sandbox Code Playgroud)

为什么它为空,我该如何解决?

ric*_*dtz 59

它发生在我身上,如果你提供MediaStore.EXTRA_OUTPUT,那么意图是null,但你将在你提供的文件中有照片(Uri.fromFile(f)).

如果您未指定,MediaStore.EXTRA_OUTPUT那么您将拥有一个意图,其中包含相机保存照片的文件中的uri.

不知道它是否是一个bug,但它的工作原理是这样的.

编辑:所以在onActivityResult()中,如果为null,则不再需要检查数据.以下与我合作:

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case PICK_IMAGE_REQUEST://actionCode
            if (resultCode == RESULT_OK && data != null && data.getData() != null) {
                //For Image Gallery
            }
            return;

        case CAPTURE_IMAGE_REQUEST://actionCode
            if (resultCode == RESULT_OK) {
                //For CAMERA
                //You can use image PATH that you already created its file by the intent that launched the CAMERA (MediaStore.EXTRA_OUTPUT)
                return;
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你

  • 如果你没有指定EXTRA_OUPTUT,你将有一个Intent,它包含图片的uri,但它将是一个缩略图(不是一个完整的分辨率).另一种方式,可能是使用Camera API并创建一个Camera实例,但我没有这方面的经验. (3认同)
  • 获得文件后,您可以通过多种不同方式显示它,例如,使用Bitmap.decodeFile创建一个Bitmap(如果需要,可以在此处重新缩放),并使用ImageView.setImageBitmap在ImageView中设置.另一种选择可能是使用ImageView.setImageUri并提供文件的Uri. (3认同)