본문 바로가기

나의 플랫폼/안드로이드

[Android] Request 보낸 Activity 강제 종료 시키기 (Camera)

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

A 화면에서 B화면을 실행 시키고, A화면 종료 되었을 때

B 화면을 종료 시키고 싶을 경우 참고 하면 좋을 듯 합니다.


아래 블로그 내용에 추가된 내용인데요.

http://gogorchg.tistory.com/entry/Android-IntentFLAGACTIVITYNOHISTORY


이 내용에서 보면 FLAG_ACTIVITY_NO_HISTORY를 쓰면 쉽게 해결 된다.

분명 제가 상단에 적어놓은 내용을 보고 바로 이 FLAG를 생각하시는 분들이 많을 것이다.


하지만, 포스트한 글 가장 하단에 보시면 아래와 같은 글을 남겼습니다.


제가 현재(2016-10-31) 테스트 해본 결과 FLAG_ACTIVITY_NO_HISTORY 를 사용 해서,

Camera를 호출 한 경우 onActivityResult 에서 항상 resultCode가 RESULT_CANCELED이 넘어 옵니다.

갤러리 같은 경우는 문제 없이 RESULT_OK가 넘어 옵니다.

이부분에 경험이 있으신 분은 괜찮으시면 댓글 부탁드려요.


FLAG_ACTIVITY_NO_HISTORY와 함께 Camera를 호출할 경우,

RESULT_OK가 넘어오지 않는다는 내용 입니다.


그럼 Camera는 그냥 포기 해야 하느냐!

그럴 필요가 없다는 내용을 적고 싶습니다.


Activity에 finishActivity 라는 함수가 있습니다.

그냥 보시면 아시겠지만 Activity를 종료 시켜주는 함수 입니다.

매개 변수로 requestCode를 보냅니다.


즉, startActivityForResult 함수를 통해 requestCode 를 보냈을 경우

해당 requestCode를 이용하여 강제적으로 종료를 시킬 수 있는 것입니다!!!


따라서 아래 소스와 같이 Intent를 보내고

onDestory에서 종료를 시킬 수 있는 것입니다.


Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String createFilePath = "";
try {
File file = createImageFile();
createFilePath = file.getAbsolutePath();
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
} catch (IOException e) {
Logger.error(e);
}
activity.startActivityForResult(intent, REQUEST_GET_CAMERA);



@Override
protected void onDestroy() {

// Acitivity 종료
finishActivity(REQUEST_GET_CAMERA);

super.onDestroy();
}


참고 하세요.