4

현재 내 파일 제공 업체에서 콘텐츠 URI를 사용하여 ACTION_IMAGE_CAPTURE 의도로 반환 된 카메라 이미지를 검색하고 있습니다. 이것은 잘 작동합니다.ACTION_VIDEO_CAPTURE에서 콘텐츠 URI 사용하기

이상한 이유로 카메라에서 비디오 파일을 검색하려고 할 때 동일한 호출이 작동하지 않습니다.

 destinationFile = File.createTempFile("video", ".mp4", this.getFilesDir()); 
     Uri uri = FileProvider.getUriForFile(this, getPackageName() + ".fileprovider", destinationFile); 

     Intent cameraIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
     cameraIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); 
     cameraIntent.setClipData(ClipData.newRawUri(null, uri)); 
     cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 
     startActivityForResult(cameraIntent, ID); 

의 DestinationFile이 비어 onActivityResult()의 의도 수익을 것입니다

.

MediaStore.ACTION_VIDEO_CAPTUREMediaStore.ACTION_IMAGE_CAPTURE으로 바꾸기 만하면 예상되는 동작을 얻을 수 있습니다. 캡처 된 이미지는 destinationFile에 저장됩니다.

Nexus 기기 및 기본 Google 카메라 앱의 Android 6.0.1 재고가 발생합니다.

콘텐츠 캡처시 비디오 콘텐츠 URI가 실제로 지원되지 않습니까? 공개적으로 액세스 할 수있는 디렉토리에서 파일 URI를 사용하지 않는 것을 선호합니다.

답변

3

Google 카메라 앱의 동작과 전체 Android 생태계의 동작은 별개의 문제입니다. 구글 카메라 앱과 관련하여

, 우리는 거기에 있기 때문에 당신이 contentUri (당신의 targetSdkVersion 경우 N 이상)를 사용하여 선택의 여지가 있지만, a bug with respect to Android N으로이 보도했다. 다음 릴리스에서 수정되어야합니다.

다른 카메라 응용 프로그램에서 contentUri 값과 관련된 문제가 발생하면 놀랍지 않습니다. 이것은 Android N effectively banning the file scheme과 관련된 우려 사항 중 하나입니다. filecontent도 신뢰할 수없는 상황에 처하게 될 것이므로 이러한 경우를 감지 할 수있는 좋은 방법이 없습니다.

+0

* offtopic * 내 질문에 대한 마지막 답변 (핑거 프린트 서비스)을 삭제했습니다. 다시 시도하십시오. 캐시를 무효로 할 필요가 있습니다! 다시 받아주세요. –

+0

Android N을 타겟팅하지 않는 한 당분간 파일 URI를 계속 사용해야합니다. 명확한 설명 주셔서 감사합니다! – limmatplatz

+1

@limmatplatz : "해야만한다"는 강력한 용어입니다. 확실히 테스트를 위해 Google 카메라 앱이 '콘텐츠'를 올바르게 지원할 때까지 '파일'을 고수해야합니다. 그런 다음 해당 콘텐츠로 전환하고 테스트 할 수 있습니다. 그러나이 기회를 빌어 다른 카메라 앱이'content '를 제대로 처리하지 못할 때 무엇을 할 것인지 결정할 수 있습니다. 'targetSdkVersion'가'N'에이를 때까지'file'은 안전해야하며 보편적으로 지원되어야합니다. 바라건대 잠시 동안'targetSdkVersion'을 올리면 안된다. 말하자면, 10 년 정도. :-) – CommonsWare