【问题标题】:onActivityResult returns null IntentonActivityResult 返回 null Intent
【发布时间】:2017-07-15 05:41:53
【问题描述】:

我正在尝试从相机捕获图像。但它返回 null Intent onActivityResult 。 这是我的代码

CaptureImageFromCamera.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, 7);
    }
});

onActivityResult

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

    if (requestCode == 7 && resultCode == RESULT_OK) {
        try {
            if(data.getData() == null) {
                bitmap = (Bitmap)data.getExtras().get("data");
            } else {
                bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), data.getData());
            }

            ImageViewHolder.setImageBitmap(bitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

我是Android新手,所以请详细解释答案。 提前谢谢..!

【问题讨论】:

  • 您是否提供了相机权限。如果 android 版本大于 lollipop,请确保在运行时授予相机权限
  • 您确定意图对象为空还是意图对象中的数据为空?
  • 数据意图为空
  • 已提供相机权限。
  • 应用程序允许捕获图像。但是当我使用位图时,它会给出空位图

标签: android android-image-capture


【解决方案1】:

通过传递意图开始你的工作:

startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), 100);

所以在从相机捕获图像后,通过意图获取有关图像的数据:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     Uri yourCapturedImage = intent.getData();
 }

【讨论】:

    【解决方案2】:

    确保您已添加相机权限、在清单中写入权限以及交叉验证运行时权限。

    使用您的 Intent 如下所示,并指定将写入捕获图像的路径 -

       intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    
       Uri outputUri = Uri.fromFile("path of your directory");
       intent.putExtra(MediaStore.EXTRA_OUTPUT, outputUri);
    
       startActivityForResult(intent, 7);
    

    【讨论】:

      【解决方案3】:

      您也可以在onActivityResult() 中使用setImageURI() 而不是setImageBitmap()

      首先在 android manifest 中添加相机权限。如果你的安卓版本大于棒棒糖那么你需要添加运行时权限See documentations here

      <uses-permission android:name="android.permission.CAMERA"/>
      

      然后你的代码将是

      CaptureImageFromCamera.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
              intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
              startActivityForResult(intent, 7);
          }
      });
      

      然后在您的onActivityResult() 中使用setImageUrI()

      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
      
           switch (requestCode)
              {
                  case 7:
                      /*case 7 for image results and display image in imageview via Uri*/
                      if (resultCode == RESULT_OK)
                      {
                          Uri imageUri = data.getData();
                          ImageViewHolder.setImageURI(imageUri);
                      }
                      return;
                 default:
                      return;
              }
      }
      

      【讨论】:

        【解决方案4】:

        Uri imageUri = data.getData() 将不再工作.. 首先从data 获取bitmap,如下所示:

        override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
            if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
                val imageBitmap = data.extras.get("data") as Bitmap
                imageView.setImageBitmap(imageBitmap)
            }
        }
        

        然后保存位图图像..请在此处查找详细信息:

        https://developer.android.com/training/camera/photobasics

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-11
          • 2011-08-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-16
          相关资源
          最近更新 更多