6

コンテンツ プロバイダー コンシューマーのクライアント側では、画像を読み取るための適切な InputStream を取得するために、次のようなことができます。

InputStream is = getContentResolver().openInputStream(pictureUri);

これは優れた API であり、サーバー側では、実際のコンテンツ プロバイダーは次の呼び出しを行います。

public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
  // Open a proper ParcelFileDescriptor, most likely using openFileHelper(uri, mode)
}

しかし、URI にマップされた画像がファイルシステム上ではなく、メモリ リソースとして、またはオンザフライで生成された場合はどうなるでしょうか。

一時ファイルをディスクに保存する必要がなく、コンテンツ プロバイダのコンシューマに返すことができるように、マップされたメモリFileまたは などを作成できますか?InputStream

4

2 に答える 2

1

これは難しいです。Socketインターフェースを使用できるものなら何でも使用できるかもしれません。私はそれをしていませんが、これが私にそう思わせる理由です:

http://developer.android.com/reference/android/os/ParcelFileDescriptor.html#fromSocket(java.net.Socket)

そして、理論的には、Socketはインターネットリソース、またはほとんどすべてのものである可能性があります...Socketレベルで作業する意思がある場合。私はおそらくあきらめて一時ファイルを作成するでしょう。おそらくそれは私を臆病者にします。

于 2009-10-10T05:11:39.827 に答える
1

Android-9 以降、ParcelFileDescriptor を使用してパイプを作成できます。最大 64k まで詰め込んで処理を完了するか、別のスレッドを設定して、読み取り後にそれを埋めることができます。詳細については、こちらの回答を参照してください。

カスタム ContentProvider - openInputStream()、openOutputStream()

于 2013-02-06T16:45:04.487 に答える