2016-01-22 90 views
0

我正在尝试拍照并将其设置为MainActivity中的ImageView。 我希望有我的相机活动作为一个单独的类,所以我尝试了以下内容: MainActivity:Android Camera将Camera Intent中的位图传递给MainActivity

public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.action_button: 
      Intent camera = new Intent(MainActivity.this,Camera.class); 
      startActivityForResult(camera ,CAMERA_IDENTIFITER); 
      break; 
     default: 
      break; 
    } 
} 
@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    //super.onActivityResult(requestCode, resultCode, data); 
    Log.d("onActivityResult","Sucessfully callbacked!"); //This one wont be executed! 
    switch(requestCode) { 
     case (CAMERA_IDENTIFITER) : { 
      if (resultCode == Activity.RESULT_OK) { 
       Bitmap bitmap = (Bitmap) data.getParcelableExtra(MediaStore.EXTRA_OUTPUT); 
       mImageView.setImageBitmap(bitmap); 
      } 
      break; 
     } 
    } 
} 

这是我的相机活动:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_camera); 
    takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    pm = getPackageManager(); 
} 
@Override 
protected void onStart() { 
    super.onStart(); 
    if(!isFromActivityResult){ 
     dispatchTakePictureIntent(); 
    } 
} 
public void dispatchTakePictureIntent() { 
    if (takePictureIntent.resolveActivity(pm) != null) { 
     File photoFile = null; 
     try { 
      photoFile = createImageFile(); 
     } catch {...} 
     if (photoFile != null) { 
      pictureTaken = true; 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, 
        Uri.fromFile(photoFile)); 
      startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 
     } 
    } 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) { 
     try { 
      bitmap = ImageFileHandler.handleSamplingAndRotationBitmap(this, Uri.fromFile(new File(mCurrentPhotoPath))); 
      //mImageView.setImageBitmap(bitmap); 
      resultIntent = new Intent(); 
      resultIntent.putExtra(MediaStore.EXTRA_OUTPUT, 
        bitmap); 
      setResult(Activity.RESULT_OK, resultIntent); 
      Log.d("onActivityResult","finish() executed!"); //This one gets executed! 
      finish(); 
     } catch {...} 
    } 
} 

相机意图正常启动,但是当我拍了一张照片,我没有回到我的MainActivity中的onActivityResult,我陷入了相机意图。

回答

0

onActivityResult()正在执行之后,onStart()被调用。因此一次又一次地启动相机意图。放入日志并测试你的自我。 解决问题 在活动isFronActivityResult中保留一个布尔变量。保持默认值为false,并执行isFromActivityResult = true;在onActivityResult()中。在onStart执行以下操作:

  @Override 
     protected void onStart() { 
      super.onStart(); 
      if(!isFromActivityResult) 
       dispatchTakePictureIntent(); 
     } 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) { 
     try { 
      bitmap = ImageFileHandler.handleSamplingAndRotationBitmap(this, Uri.fromFile(new File(mCurrentPhotoPath))); 
      //mImageView.setImageBitmap(bitmap); 
      resultIntent = new Intent(); 
      resultIntent.putExtra(MediaStore.EXTRA_OUTPUT, 
        bitmap); 
      setResult(Activity.RESULT_OK, resultIntent); 
      isFromActivityResult = true;// add this line 
      finish(); 
     } catch {...} 
    } 
} 
+0

非常感谢您,我正在尝试! –

+0

好的,一切顺利,在任何问题或成功的情况下更新。 – sherlock

+0

试过了,我现在正在返回Camera活动状态,但没有返回到MainActivity。 –