2

타사 앱 (예 : WhatsApp)의 이미지를 내 앱 (Marshmallow에서 테스트 중)으로 가져 오려고합니다. 나는 WhatsApp에에서 "공유 이미지"를 수행하고 내 응용 프로그램과 공유 할 때,이 같은 URI 뭔가 얻을 :Android : 콘텐츠 : // URI를 통해 타사 앱 (예 : WhatsApp)에서 이미지 비트 맵 가져 오기

content://com.whatsapp.provider.media/item/61025 

을하지만 URI 이상으로 getContentResolver().openInputStream(uri) 또는 getContentResolver().openFileDescriptor(uri, "r")를 호출 내 응용 프로그램에서, 그것은 예외 충돌 :

이 java.lang.SecurityException : 허가 거부 : ProcessRecord 개구로부터 제공 com.whatsapp.MediaProvider {a4b804a 30,321 : com.myapp/u0a145} (PID = 30,321 = 10,145을 UID)로부터 수출되지 uid 10083

내가 그렇게하려고 무엇

훨씬

나는 SO에이 예외를 찾았다 및 similar question이 제기하지만 Google 포토 이미지를 가져 발견과 같은 권한을 추가하는 것을 필요있어 :

<uses-permission android:name="com.google.android.apps.photos.permission.GOOGLE_PHOTOS"/>

을 그러나 많은 앱이있을 수 있고 각 앱 또는 다른 앱에 대한 권한을 추가해야 할 필요가 있기 때문에이를 고려하지 않아도됩니다.

다른 answers에서는 콘텐츠 제공 업체의 데이터를 즉시 읽거나 복사하는 것이 좋습니다. 그러나 확실하지 않은 방법. 내가 예외적으로 openInputStream에서 얻었 기 때문에.

또한 WhatsApp 이미지를 다른 앱 (예 : Google 드라이브)과 공유 할 수 있으므로이를 수행 할 수있는 방법이 있어야한다고 언급해야합니다.

공유 힌트 나 해결 방법을 알려주십시오.

+0

외부 저장소에서 읽을 수있는 권한이 있으며 런타임 중에 확인 했습니까? –

+0

해당 제공 업체가 내보내지지 않았으므로 일부 제한된 패키지 하위 집합 (예 : Google 드라이브)에 액세스 할 수 있지만 앱에서 허용되지 않습니다. – pskink

+0

@Nabin 예 허가가 있습니다 – Atul

답변

1

확인. 문제가있는 곳을 찾았습니다. 내 응용 프로그램의 초기 활동에서 콘텐츠 URI (WhatsApp 또는 Chrome 등의 타사 응용 프로그램에서 가져온 내용 : 예 : content : //com.whatsapp.provider.media/item/61025)를 배열에 저장하고있었습니다. 다른 활동.

아니요,입니다. 나는 this 답변에서 힌트를 얻었고 바로 공유 내용을 얻은 후에 앱의 실행 프로그램 활동에서 바로 getContentResolver().openInputStream(uri)을 호출했습니다. 그리고 그것은 효과가 있었고 어떤 예외도 던지지 않았습니다.

+0

당신은 fromcontent로부터 경로를 얻기위한 샘플 코드를 제공 할 수 있습니다 : //com.whatsapp.provider.media/item/45856 –

+0

URI에서 경로를 가져 오지 마십시오. URI를 다루는 올바른 방법이 아닙니다. 대신에 getContentResolver().를 사용하십시오. openInputStream (uri) – Atul

+0

getContentResolver(). 나는 완전히 혼란 스럽다. –

관련 문제