2

私のアプリにサードパーティのアプリ(たとえばWhatsApp)からイメージを取得しようとしています。Android:コンテンツ:// URI経由でサードパーティのアプリ(例:WhatsApp)からビットマップイメージを取得する

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

しかし、私のアプリで、私はURI上記でgetContentResolver().openInputStream(uri)またはgetContentResolver().openFileDescriptor(uri, "r")を呼び出すとき、それは例外でクラッシュ:

私はのWhatsAppから「共有イメージ」を行うと、私のアプリでそれを共有する場合、私はこのようなURIの何かを得ます

java.lang.SecurityException:から エクスポートされていない(PID = 30321、UID = 10145)アクセス権拒否:ProcessRecord {com.myapp/u0a145 a4b804a 30321}から開口プロバイダ com.whatsapp.MediaProvider 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のようなサードパーティのアプリケーションから取得したコンテンツ://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()。openInputStream(uri)返すもの??私は完全に混乱しています –

関連する問題