2014-11-13 2 views
0

MainActivity에서 카메라 활동을 시작하고 다른 활동으로 이미지를 반환하는 버튼을 구현하는 가장 좋은 방법을 찾으려고합니다. 기본적으로 이미지를 활동에 반환하여 설명을 이미지에 추가합니다. 좋은 생각이 될 것이라고 생각한 것은 카메라 버튼을 누르고 새 활동에서 카메라 활동을 시작하면 단일 사진보기 활동을 시작하는 것입니다. 다른 일을하기 전에 결과; 하지만 가끔씩 카메라가 반복적으로 멈추는 간헐적 인 문제가 있습니다.간헐적 인 문제로 인해 onCreate에서 카메라 시작

아마도 더 좋은 방법이 있을까요? 먼저 결과에 대한 카메라 활동을 시작한 다음 이미지를 의도로 전달해야합니까? 여기

내가 지금 무엇을 가지고 :

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    }else if (id == R.id.menu_rules){ 
     Intent rulesIntent = new Intent(this, RulesActivity.class); 
     startActivity(rulesIntent); 
     return true; 
    }else if (id == R.id.menu_import_photo){ 
     //pull in an image from the gallery 

     return true; 
    }else if (id == R.id.menu_item_new_photo){ 
     startActivity(new Intent(MainActivity.this, SinglePhotoViewActivity.class)); 
    } 
    return super.onOptionsItemSelected(item); 
} 

과 수신 활동 ..

public class SinglePhotoViewActivity extends Activity { 

private static final String LOG_TAG = "Simple Camera App"; 
private static int TAKE_PICTURE = 1001; 
private ImageView imageView; 
private Uri imageUri; 
private Bitmap bitmap; 
private TextView textView; 
private EditText editText; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_single_photo_view); 

    if (bitmap == null) 
     takePhoto(); 


} 

public void takePhoto(){ 
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
    File photo = new File(Environment 
      .getExternalStoragePublicDirectory(Environment 
        //this will continually overwrite the same file 
        //need to implement a date/ time string 
        //to save as file name. 
        .DIRECTORY_PICTURES), "pic.jpg"); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); 
    imageUri = Uri.fromFile(photo); 
    startActivityForResult(intent, TAKE_PICTURE); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    switch(requestCode) { 
     case 1001: 
      if(resultCode == Activity.RESULT_OK) { 
       getContentResolver().notifyChange(imageUri, null); 
       imageView = (ImageView)findViewById(R.id.ivCameraImageView); 
       ContentResolver contentResolver = getContentResolver(); 

       try { 
        bitmap = android.provider.MediaStore.Images.Media.getBitmap(contentResolver, 
         imageUri); 
        imageView.setImageBitmap(bitmap); 
       } catch(Exception e) { 
        Toast.makeText(SinglePhotoViewActivity.this, "failed to load", 
          Toast.LENGTH_LONG).show(); 
        Log.e(LOG_TAG, e.toString()); 
       } 
      } 
    } 
} 
} 

답변

1

귀하의 상황이 ACTION_IMAGE_CAPTURE 의도가 시작됩니다 자주 때 발생하는 것과 유사한이다 (예를 들어 Android startCamera gives me null Intent and ... does it destroy my global variable?).

원인은 시스템에서 발신자 활동 (귀하의 경우 SinglePhotoViewActivity)을 삭제하고 시작된 활동 (귀하의 경우 시스템 카메라 활동)이 결과를 반환 한 후 다시 생성하기 때문일 수 있습니다.

궁극적 인 수정 프로그램은 호출 활동에 onSaveInstanceState(Bundle)을 구현하는 것입니다. 그러나 특정 상황에서 바로 가기가 있습니다. 인 텐트를 onCreate()에서 확인하고 MainActivity에서 온 것이라면 카메라를 실행하십시오. 그렇지 않으면 지금 마치 onActivityResult()을받는 것처럼 진행하십시오.

관련 문제