마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

크롬 공유하기로 이미지 가져왔을때 SecuriyException 문제

0 추천
크롬 공유하기로 이미지 가져왔을때 SecuriyException 문제

 

이미지 공유하기를 선택하여 앱으로 가져오고 싶습니다.

익스플로러에서 이미지 공유하기로 가져오면 잘 되는데

크롬에서 이미지 공유하기를 선택하여 앱으로 가져오면 SecuriyException 이 납니다.

java.lang.SecurityException: Permission Denial: opening provider org.chromium.chrome.browser.util.CompatibilityFileProvider

 

android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_EXTERNAL_STORAGE

퍼미션 사용자 권한도 받은상태입니다.

 

private void test(){
    String url = "content://com.android.chrome.FileProvider/images/screenshot/1481679048175-1404337754.jpg";
    Uri uri = getConvertUri(Uri.parse(url));
    Log.d("TEST"," uri : "+uri.getPath());
}
private Uri getConvertUri(Uri imageUri){
    Log.d("TEST","getConvertUri() imageUri ==>"+imageUri);
    //getIntent().setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

    try {
        //임시파일로 저장하고 파일 경로를 에디터로 던진다.
        File file = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis() + ".jpeg");

        ContentResolver aaaa = getContentResolver();
        InputStream inputStream = aaaa.openInputStream(imageUri);

        if (inputStream != null) {
            OutputStream outStream = new FileOutputStream(file);
            byte[] buf = new byte[1024];
            int len;
            while ((len = inputStream.read(buf)) > 0) {
                outStream.write(buf, 0, len);
            }
            outStream.close();
            inputStream.close();
            if (file.length() > 0) {
                return new Uri.Builder().scheme("file").path(file.getAbsolutePath()).build();
            }
        }

    }catch(Exception e){
        Log.d("TEST","getConvertUri() IOException ==>"+ e.toString());
        e.printStackTrace();
    }
    return null;
}
xjell (240 포인트) 님이 2016년 12월 19일 질문

1개의 답변

0 추천
 
채택된 답변
위에 올린 코드로는 오류가 발생하는 것이 당연합니다.

content:// uri를 받는 쪽에서 Intent.FLAG_GRANT_WRITE_URI_PERMISSION 를 설정하는 것은 동작하지 않습니다.

uri를 보내는 쪽(크롬앱)에서 설정해야 합니다.
익명사용자 님이 2016년 12월 19일 답변
xjell님이 2016년 12월 19일 채택됨
답변 감사드립니다.
카카오톡이나 다른 앱에 공유하기로 들어갈경우 이미지가 나오던데..
크롬에 제 앱에대한 permission 을 요청해야한다는것인가요?
크롬에 permission을 요청할 방법은 없습니다.

위의 코드가 임시로 테스트 목적으로 저렇게 한게 아니라 실제 코드라면 바꾸어야 합니다. 전달받은 uri는 전달받은 순간에만 유효합니다. 저장해놓았다가 나중에 다시 사용하려 할 경우 정상동작할지 알 수 없습니다.
...