2017-05-19 14 views
0

카메라 및 갤러리 자르기는 android nougat 7에서 카메라를 여는 동안 android nougat 7에서 지원되지 않습니다.이 오류 메시지가 나타납니다.Nougat 7에서 안드로이드 카메라 자르기 지원 안함

android.os.FileUriExposedException :

파일 : ///storage/emulated/0/file1495176310055.jpg는 ClipData.Item.getUri() 앱의

+1

자르기 문제가 아니다. Android 7에서 파일 액세스 시스템이 변경되었습니다. 이제부터는 다른 앱이 제공된 Uris –

+0

을 통해 앱을 넘어서서 ClipData.Item.getUri()을 통해 콘텐츠 제공 업체를 구현해야합니다. 어떻게 될지 궁금합니다. 가능한. – greenapps

+1

https://stackoverflow.com/questions/38200282/android-os-fileuriexposed-file-storage-emulated-0-test-txt-exposed – CommonsWare

답변

2

을 통해 응용 프로그램 이상 노출 Android 7.0을 타겟팅하는 Android 프레임 워크는 StrictMode API 정책을 적용하여 앱 외부에 file:// 개의 URI가 노출되지 않도록합니다. 파일 URI가 포함 된 인 텐트가 앱을 나가면 FileUriExposedException 예외로 앱이 실패합니다.

응용 프로그램간에 파일을 공유하려면 content : // URI를 보내고 URI에 대한 임시 액세스 권한을 부여해야합니다. 이 사용 권한을 부여하는 가장 쉬운 방법은 FileProvider 클래스를 사용하는 것입니다. 당신은 내 솔루션을보십시오 할 수

.. 3.in 매니페스트 내부 태그

 <provider 
     android:name="android.support.v4.content.FileProvider" 
     android:authorities="android3.maxtingapp.provider" 
     android:exported="false" 
     android:grantUriPermissions="true"> 
     <meta-data 
      android:name="android.support.FILE_PROVIDER_PATHS" 
      android:resource="@xml/provider_paths"/> 
    </provider> 

에서

1.add의 고해상도/XML/provider_paths.xml

provider_paths.xml 
    <?xml version="1.0" encoding="utf-8"?> 
    <paths xmlns:android="http://schemas.android.com/apk/res/android"> 
    <external-path name="images" path="."/> 
    </paths> 

2.add 당신의 작물에 대한 활동 추가 기능 내 샘플 아래의 이미지

private void cropImage(File file) { 
     final int width = 400; 
     final int height = 200; 

    try { 
    Intent cropIntent = new Intent("com.android.camera.action.CROP"); 

    Uri contentUri; 

     if(Build.VERSION.SDK_INT > M){ 

      contentUri = FileProvider.getUriForFile(AddPlace.this, 
            "android3.maxtingapp.provider", 
            file);//package.provider 

      //TODO: Permission.. 

      getApplicationContext().grantUriPermission("com.android.camera", 
                 contentUri, 
      Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); 

      cropIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
      cropIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 

     }else{ 

      contentUri = Uri.fromFile(file); 

     } 

     cropIntent.setDataAndType(contentUri, "image/*"); 
     cropIntent.putExtra("crop", "true"); 
     cropIntent.putExtra("aspectX", 2); 
     cropIntent.putExtra("aspectY", 1); 
     cropIntent.putExtra("outputX", width); 
     cropIntent.putExtra("outputY", height); 

     cropIntent.putExtra("return-data", true); 
     startActivityForResult(cropIntent, REQUEST_CROP_ICON); 

    }catch (ActivityNotFoundException a) { 
     Log.e("Activity Not Found",""+a.toString()); 
    } 
} 

나는 이것이 someone을 위해 도움이되기를 바란다 ..