2016-10-17 11 views
1

Android API 19 (Kitkat)에서 콘텐츠 uri 및 FileProvider를 사용하는 중에 문제가 발생합니다. 여기에 내가 장치에 카메라를 열고 비디오 녹화하는 데 사용하는 코드입니다 :콘텐츠 uri가 Android KitKat에서 카메라를 크래킹 함

File file = new File(pathname); 
Uri fileUri = FileProvider.getUriForFile(this, AUTHORITY_STRING, file); 

Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
startActivityForResult(intent, requestCode); 

내가 API의 23 ~ 24에이 코드를 테스트 한은 그것은 잘 작동하지만, API에 19 카메라가 내가 시작한 후 RESULT_CANCELED에 종료 카메라 앱에서 비디오를 찍는 것. ACTION_IMAGE_CAPTURE 동작으로 사진을 찍을 때도 똑같은 일이 발생합니다. Uri.fromFile()을 사용하여 FileProvider.getUriForFile()을 변경하려고했습니다. 이것은 Kitkat에서 완벽하게 작동하지만 Android 7에서는 사용할 수 없습니다. Adnroid Kitkat의 카메라가 콘텐츠 uri를 사용하지 않으려하는 이유는 무엇입니까?

답변

1

모든 카메라 앱이 EXTRA_OUTPUT의 값인 contentUri 값을 지원하지는 않습니다. 그러나 수천 개의 카메라 앱이 있으며 그 중 일부는 실패 할 것입니다. Uri. 예를 들어 올 여름까지 Google 자체 카메라 앱은 UriEXTRA_OUTPUT (ACTION_VIDEO_CAPTURE)을 지원하지 않았습니다.

ACTION_VIDEO_CAPTURE을 사용하거나 더 신뢰할 수없는 결과를 나타내며 중지하십시오. 당신이 fileUri 값을 계속 사용하려고 할 경우

, 당신의 targetSdkVersion 23 이하로 떨어 뜨리거나 StrictMode 구성을 변경하여 FileUriExposedException을 사용하지 않도록 설정합니다.

+0

빠른 답변 감사드립니다. – Yenn

+0

그래서 API 24를 targetSdkVersion으로 사용하고 콘텐츠 Uri를 계속 사용하려면 일부 장치에서이 오류를 방지 할 수있는 방법이 없습니까? – Yenn

+0

@Yenn : 카메라 앱 개발자가 'content''Uri' 값을 지원하도록 강요 할 수 없습니다. – CommonsWare

9

어쩌면 시도해 볼 수 있습니다.

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT){ 
     fileUri = Uri.fromFile(mTmpFile); 
    } else { 
     fileUri = FileProvider.getUriForFile(getContext(), 
       getContext().getPackageName()+".provider",mTmpFile); 
    } 
+0

나를 위해 Uri.fromFile 작업을 사용하십시오. 감사합니다. – souttab

+0

이것은 KITKAT에서 작동합니다. ..... 굉장합니다. – Vicky

+0

답변입니다. 감사 –