2011-09-02 6 views
3

내 앱의 경우 활동이 생성 될 때 카메라 의도가 실행됩니다. 문제는 캡처 한 사진을 확인을 클릭하면 카메라를 다시 열어 사진을 찍는 것입니다. 다음은 코드입니다. taken은 다른 활동에서 false로 설정됩니다. 이 활동이 시작될 때 촬영 된 내용이 거짓임을 확인할 수 있습니다.android에서 열리는 카메라의 의도

public class QuickEditActivity extends Activity { 

    public static boolean taken; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.quickedit); 

     if(!QuickEditActivity.taken) { 
      RunCam(); 
     } 

    } 

    private void RunCam() { 
     QuickEditActivity.taken = true; 
     Intent camIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(camIntent,1); 

    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(data != null && data.getExtras() != null) { 
      Bitmap bitmap = (Bitmap)data.getExtras().get("data"); 

      if(bitmap != null) { 
      ImageView imgView = (ImageView)findViewById(R.id.CamView); 

      imgView.setImageBitmap(bitmap); 

      } 
      else 
      { 

      this.finish(); 
      } 

     } 
     else { 
      this.finish(); 
     } 

     super.onActivityResult(requestCode, resultCode, data); 
    } 
}  
+0

촬영하지 않을까요 당신이 그것을 취급했다는 것을 나타내는, 진실해야합니까? 아니면 다른 말하고있는거야? 또한 다른 코드를 게시하면 다른 활동에 대해 이야기 할 수 있습니다. 무엇을하고 있습니까? – Jack

답변

4

내 심령 술사는 Nexus 휴대 전화가 있다고 알려줍니다. 또한 나의 심령 술꾼은 Activity을 통해 을 통해 카메라 캡처를 시작하면 카메라 캡처 Activity이 완료되면 프로세스가 중지 된 다음 다시 시작됩니다. 따라서 정적 변수 taken이 false로 재설정되어 onCreate 메서드가 항상 이것이 처음 실행되고 있다고 생각하여 무한 카메라 캡처 루프에 빠지게합니다.

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    outState.putBoolean("taken", true); 
} 

그런 다음 전달 된 Bundle에서이 값을 확인 : 당신은 onSaveInstanceState()를 재정 의하여이 문제를 해결할 수

Log.d("QuickEditActivity", "Value of taken = " + (taken ? "true" : "false")); 

:

당신은 당신의 onCreate 방법 다음 문을 추가하여이를 확인할 수 있습니다 onCreate(Bundle) 방법으로

내 심령 능력이 어떻게되었는지 알려주십시오. 이

private void startQuickEditActivity() { 

    RunCam(); 

} 


private void RunCam() { 
    Intent camIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(camIntent,1); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Intent i = new Intent(this, QuickEditActivity.class); 
    i.putExtras(data); 
    startActivity(i); 

    super.onActivityResult(requestCode, resultCode, data); 
} 

QuickEditActivity

시작 클래스에 갔다 그리고 여기에 빠른 편집

공용 클래스 QuickEditActivity의 코드입니다 활동을 {확장 :

+1

+1 - 심령 술사의 성격 – Martyn

+0

귀하의 능력은 가까웠습니다. 내가 들었던 드로이드는 넥서스와 비슷한 문제가 있습니다. 나는 그것이 항상 거짓으로 설정되어있는 것을 발견했다. 그래서 나는 어딘가에서 나를 데려 간다. 변수를 다른 클래스에 두어 더 전역 적으로 만들고 변수를 false로 다시 설정합니다. onSaveInstanceState()를 구현하고 추락했으며 이유를 파악할 수 없습니다. savedInstanceState.getboolean()을 사용하려고하면 충돌이 발생합니다. 나는 카메라 만물을 묻어야 할 수도있다. 다른 제안들도 있니? – Cody

+0

스택이 충돌 할 때 스택은 무엇입니까? –

-1

나는 여기에, 그것을 다른 방식으로 수행하여 고정

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.quickedit); 

    Intent data = this.getIntent(); 

    if(data != null && data.getExtras() != null) { 
     Bitmap bitmap = (Bitmap)data.getExtras().get("data"); 


    if(bitmap != null) { 
     ImageView imgView = (ImageView)findViewById(R.id.CamView); 

     imgView.setImageBitmap(bitmap); 



    } 
    else 
    { 

     this.finish(); 
    } 

    } 
    else { 
     this.finish(); 
    } 

} 

}