为什么 Camera return extra 为空?

Why Camera return extra is null?

我用标准相机拍照:

  val takePicture = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
  startActivityForResult(takePicture, TAKE_PICTURE)

接收结果:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {       
    if (resultCode != Activity.RESULT_CANCELED) {
        if (requestCode == TAKE_PICTURE && resultCode == RESULT_OK && data != null) {
            presenter!!.takeImg(this, data)
        }
    }    
}

函数代码如下takeimg:

fun takeImg(context: Context, data: Intent) {       
    val imageName = CameraCommon.getFileNamePhotoReg(mImageType)        
    val bitmap = data.extras!!.get("data") as Bitmap
    val imageFile = CameraCommon.createImageByBitmap(context, imageName, bitmap, typePNG)
    setImg(imageFile.absolutePath)    
}

在某些设备上拍照后出现以下错误:

04-23 17:53:40.153 17393-17393/jp.osaka.mozuyan E/AndroidRuntime: FATAL EXCEPTION: main
                                                                  Process: jp.osaka.mozuyan, PID: 17393
                                                                  java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=6352, result=-1, data=Intent { dat=content://media/external/images/media/100582 typ= flg=0x1 }} to activity {jp.osaka.mozuyan/jp.osaka.mozuyan.photoreg.PhotoRegActivity}: kotlin.KotlinNullPointerException
                                                                      at android.app.ActivityThread.deliverResults(ActivityThread.java:3699)
                                                                      at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)
                                                                      at android.app.ActivityThread.access00(ActivityThread.java:150)
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)
                                                                      at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                      at android.os.Looper.loop(Looper.java:148)
                                                                      at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:764)
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
                                                                   Caused by: kotlin.KotlinNullPointerException
                                                                      at jp.osaka.mozuyan.photoreg.PhotoRegPresenter.takeImg(PhotoRegPresenter.kt:46)
                                                                      at jp.osaka.mozuyan.photoreg.PhotoRegActivity.onActivityResult(PhotoRegActivity.kt:107)
                                                                      at android.app.Activity.dispatchActivityResult(Activity.java:6490)
                                                                      at android.app.ActivityThread.deliverResults(ActivityThread.java:3695)

line 46: val bitmap = data.extras!!.get("data") as Bitmap and data.extras is null

为什么extra为空? 如何将数据保存到图像文件。 谢谢。

use this code to store image into sd card then just get the image and display the image view.if you want you can convert into bitmap also

      if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            //   takePictureButton.setEnabled(false);


          ActivityCompat.requestPermissions(this, new String[] 
    {  
     Manifest.permission.CAMERA,  
     Manifest.permission.WRITE_EXTERNAL_STORAGE
    ,Manifest.permission.READ_EXTERNAL_ST ORAGE}, 0);
    Toast.makeText(getApplicationContext(),"After permition Restart 
    App",Toast.LENGTH_SHORT).show();

    }else {

    takePictureButton.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              takePicture(v);
          }
      });
    }}

    public void takePicture(View view) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        file = Uri.fromFile(getOutputMediaFile());
        intent.putExtra(MediaStore.EXTRA_OUTPUT, file);

        startActivityForResult(intent, 100);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 100) {
            if (resultCode == RESULT_OK) {
          imageView.setImageURI(file);
            }
        }
    }
    private static File getOutputMediaFile(){
        File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_PICTURES), "CameraDemo");

        if (!mediaStorageDir.exists()){
            if (!mediaStorageDir.mkdirs()){
                return null;
            }
        }

        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
//any path 
        return new File(mediaStorageDir.getPath() + File.separator +
                "IMG_"+ timeStamp + ".jpg");
    }