Bundle extra = data.getExtras()在使用摄像头拍摄后没有任何照片

问题描述:

我是Android新手,正在开发关于Google的培训课程,现在遇到问题。在执行Bundle extra = data.getExtras()后,extra为空。此外,它会抛出一个NullPointerException之前,我添加代码"if(extra!=null)" 下面是onActivityResult的代码()方法Bundle extra = data.getExtras()在使用摄像头拍摄后没有任何照片

enter image description here

下面是代码部分,启动摄像头,并保存照片在本地

enter image description here

我的所有代码都遵循培训课程,我很困惑哪里出错。 有人可以帮我吗?

+4

把你的代码放在这里,而不是图像。 – currarpickt

请更新您的onActivityResult(),拍摄照片的结果不响应图像。它返回你在photo_intent.putExtra(MediaStore.EXTRA_OUTPUT, <<uri>>)中通过的Uri。所以,请声明<<uri>>全球那么你可以如果你通过了额外的参数MediaStore.EXTRA_OUTPUT用相机意图,然后相机活动将写入所拍摄的图像,以这条道路在onActivityResult()

+0

我认为你是对的,现在我发现它会返回一个Uri,我想我会解决它,非常感谢! – smilebuz

+0

@smilebuz结果如何? –

+0

现在,我可以正确显示此消息,感谢您的帮助! – smilebuz

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { 

      hasWriteContactsPermission = checkSelfPermission(Manifest.permission.CAMERA); 
      if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) { 
       requestPermissions(new String[]{Manifest.permission.CAMERA}, 
         REQUEST_CODE_ASK_PERMISSIONS); 
       return; 
      } 
     } else { 
      Intent intent = new Intent(
         MediaStore.ACTION_IMAGE_CAPTURE); 
       if (intent.resolveActivity(getPackageManager()) != null) { 
        File photo = new File(Environment 
          .getExternalStorageDirectory(), 
          "Journal" + Utils_class.getID() + ".jpeg"); 
        intent.putExtra(MediaStore.EXTRA_OUTPUT, 
          Uri.fromFile(photo)); 
        mSelectedFilePath = photo.getAbsolutePath(); 
        startActivityForResult(intent, 
          ACTION_TAKE_PICTURE); 
       } 

     } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 
     try { 
      if (resultCode == RESULT_OK) { 
     if (requestCode == ACTION_TAKE_PICTURE) { 
        // flag = true; 
        // new Utils(); 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
         checkPermissionForStorageForCam(); 
        } else { 

         Uri selectedImageUri = data.getData(); 

        } 


       } 

      } 
     } catch (Exception e) { 
     } 
    } 
+0

@smilebuz你必须检查它的marshmellow与否。如果沼泽醇厚意味着您已获得运行时间的许可。 –

得到这个值并不会返回onActivityResult方法中的位图。

如果您将检查您传递的路径,那么您将知道实际上摄像头已将捕获的文件写入该路径。