2017-10-27 8 views
0

これらはどちらも別のアプリで使用されています。 FacebookはFile Urisと、WhatsappはContent Urisと共有しています。私のアプリがビデオや写真を共有できるのであれば、どちらを使うべきですか?コンテンツ://とファイル://写真と動画を共有する場合のアンドロイドで

また、私のアプリがビデオと写真を受け入れる必要がある場合は、どのタイプのものを用意する必要がありますか?両方の場合、コンテンツURIをFile Uriに変換するのか、それとも逆の方法にするべきですか?

+0

あなたは両方のために準備して変換しないでください。 – greenapps

+0

'android.support.v4.content.FileProvider' – pskink

答えて

0

私のアプリがビデオや画像を共有できる場合、どちらを使うべきですか?

は、Android 7.0以降では、あなたは、このようなFileProviderからなど、contentUriを使用して共有するしか選択の余地を持っています。

Android 6.0以降では、コンテンツが内部ストレージにある場合は、サードパーティアプリで内部ストレージの一部にアクセスできないため、FileProviderも使用する必要があります。コンテンツが外部ストレージにある場合は、fileまたはcontentのいずれかを使用できます。デバイスが古いほど、あらかじめインストールされているアプリはfileのみをサポートする可能性が高くなります。

私のアプリがビデオと写真を受け入れるべきかどうか、どのタイプのものを準備すればよいですか?

理想的には両方。 ACTION_SENDを意味する「受け入れる」場合は、両方をサポートする以外に選択肢はありません。 ACTION_VIEWIntentのように、IntentのデータファセットがUriに使用されている場合は、<data>要素を使用して、サポートしているスキームを宣伝してください。

私はContent URIをFile Uriに変換するのか、それとも逆の方法にするべきですか?

どちらもありません。元のソースからコンテンツを消費します。 ContentProviderは、getType()openInputStream()などの両方のスキームをサポートしています。

+0

getActivity()。getContentResolver()。私がfile:///storage/emulated/0/com.facebookで使用すると、getType(urinormal)がクラッシュします。 katana/fb_temp/.facebook_325452438679.jpg 私はストレージパーミッションが必要かもしれないと思った、それは正しい? – Tomhawk

+0

@トムホーク:正しい。 'READ_EXTERNAL_STORAGE'パーミッションを保持する必要があります。これには、Android 6.0以降で実行時にパーミッションを要求する必要があります。 – CommonsWare

+0

ありがとう、それは動作します。私がMarshmellowデバイスを持っていないので、そこのパーミッションで定義すればどうなるでしょうか?それはまだ私のエミュレータで動作します。 – Tomhawk

関連する問題