2017-11-09 15 views
0

내 앱에서 MediaStore.ACTION_IMAGE_CAPTURE 인 텐트를 사용하여 카메라를 실행하고 캡처 한 이미지를 저장합니다.시스템 뒤로 버튼을 누르면 ACTION_IMAGE_CAPTURE 의도로 촬영 한 이미지를 저장할 수 있습니까?

내 질문은 : 사진을 찍은 후 사용자가 시스템 뒤로 버튼을 눌러도 그 의도대로 캡처 된 이미지 데이터를 어떻게 든 저장할 수 있습니까?

내 앱은 여가 장르이므로 일반적으로 사용자는 예쁜 풍경, 셀카 등의 사진을 찍기 위해 카메라를 실행합니다. 나는 그들이 생각한 사진을 잃어 버렸다는 사용자 불만이 많았습니다. 카메라 앱에서 시스템 뒤로 버튼이 어떻게 작동하는지에 대한 기대 때문에 찍은 것입니다. 내가 카메라 응용 프로그램을 실행하는 경우

예를 들어, 내 넥서스 6P에, 그것은 다음과 같습니다

나는 셔터 버튼을 누르 때마다 사진이 갤러리에 저장됩니다. 시스템을 다시 누르면 카메라 앱이 종료됩니다. 내 응용 프로그램에서 MediaStore.ACTION_IMAGE_CAPTURE 의도를 실행하면

, 그것은 다음과 같습니다

카메라 응용 프로그램과 거의 동일합니다. 대신 나는이 간질되게 해요 : : I 셔터 버튼을 누를 때, 사진이 저장되지 않습니다 내가 틱을 누르면

이 큰 내 이미지가 저장되지만 나는 야하는 경우 사용자가 카메라 앱에 익숙하다면 필자는 사진을 찍은 후에 이미 시스템이 종료되었다고 생각하고 시스템을 다시 눌러 카메라를 종료 할 수 있습니다.

현재
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, this.temporaryFileURI); 

나는 결과를 처리 할 때 결과가 OK 인 경우, 내가에서 파일을 복사 : 나는 의도를 실행하면

은 내가 EXTRA_OUTPUT 매개 변수로 캐시 디렉토리에 임시 파일 URI를 전달 갤러리 위치의 임시 위치이며 결과가 취소 된 경우 (예 : 사용자가 누른 시스템 뒤로 버튼) 카메라 동작이 취소되었음을 나타내는 축배를 표시합니다. 뒤로 버튼이를 누른 후를 누르면 그러나

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (resultCode == Activity.RESULT_OK || resultCode == Activity.RESULT_CANCELED) { 
     copyImageFile(this.temporaryFileURI, galleryUri); 
    }else { 
     this.fail("A problem occurred while taking the photo."); 
    } 
} 

: 뒤로 버튼을 누를 경우 임시 파일에 관계없이 복사 될 수 있도록 내가하고 싶었던 무엇

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (resultCode == Activity.RESULT_OK) { 
     copyImageFile(this.temporaryFileURI, galleryUri); 
    }else if(resultCode == Activity.RESULT_CANCELED){ 
     this.fail("Camera cancelled."); 
    }else { 
     this.fail("A problem occurred while taking the photo."); 
    } 
} 

이를 변경했다 셔터 버튼을 눌러 사진 (resultCode == Activity.RESULT_CANCELED)을 가져 오는 경우 ACTION_IMAGE_CAPTURE 의도로 기록되지 않은 임시 파일로 인해 FileNotFound 예외가 있습니다 (copyImageFile()).

+0

없음을 사용하는 대신 자신의 카메라 활동을 만드는 것입니다, 당신은 Activity.RESULT_CANCELED을 얻을 것이다. – Khemraj

답변

1

슬프게도 외부 앱에 대한 의도를 시작하면 가지고있는 모든 통제력을 잃어 버리고 행동을 바꿀 방법이 없습니다. 사용자가 해당 인 텐트에서 뒤로 버튼을 누르면 앱으로 돌아가지만 Activity.RESULT_CANCELED이 표시되고 이미 확인한 정보는 없습니다.

유일한 옵션은 MediaStore.ACTION_IMAGE_CAPTURE

+0

감사합니다. Julio, 나는 이것이 사실 일 것이라고 생각했지만, 어쨌든, 어쨌든, 내가 놓친 오프 - 더 - 벽면의 해결 방법이있는 경우를 대비하여 어쨌든, 라인을 캐스팅 할 것이라고 생각했습니다. 단기간에 나는 선제 대화를 사용하여 사용자에게 향후 Camera 활동의 동작을 알려주므로, 지금 당장은 그것에 충실 할 것입니다. – DaveAlden