65

FileInputStreamユーザーが画像ギャラリーから選択した画像上のオブジェクトを取得しようとしています。URIこれはによって返されるアンドロイドですandroid.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI

content://media/external/images/media/3

このオブジェクトからJavaURIオブジェクトを作成しようとするIllegalArgumentExceptionと、例外の説明が表示されますURIの期待されるファイルスキーム:content:// media / external / images / media / 3一方、androidURIはスキームをコンテンツとして表示します

更新:元の質問の解決策が見つかりませんでした。ただし、画像ギャラリーに画像のバイトストリームが必要な場合は、このコードでそれを実行できます。

Bitmap bitmap = Media.getBitmap(getContentResolver(), imageUri);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
ByteArrayInputStream fileInputStream = new ByteArrayInputStream(bytes.toByteArray());
4

5 に答える 5

43

コンテンツURIからInputStreamを開く正しい方法を見つけました:

InputStream fileInputStream=yourContext.getContentResolver().openInputStream(uri);

それで全部です!

于 2009-04-24T06:03:03.420 に答える
3

元の質問に対する解決策があります (Uri を URI に変換します):

  1. 実際のファイル パスを取得します (このコードを見てください: Get filename and path from URI from mediastore )

  2. 実際のパスとコンストラクターを使用して URI を取得します: URI(String uri)

詳細が必要な場合は、こちらをご覧ください。

ACTION_VIDEO_CAPTURE でインテントを使用して録画されたビデオを削除するには?

于 2011-06-30T11:45:15.517 に答える
0

String の構築がうまくいかないので、自分で構築してみましたか?

android.net.URI auri = new android.net.URI(what ever);
java.net.URI juri = new java.net.URI(auri.getSchema(),
                                     auri.getSchemaSpecificPart(),
                                     auri.getFragment());

また、Android URI クラスから有効なデータを取得していることを再確認することもできます。私の他の回答にリストされているドキュメントでは、エラーチェックがほとんど行われない方法について説明しています。実際にエラーが発生した場合、クラスはとにかくガベージを吐き出し、例外をスローしません。これは、検証を行う Java クラスが例外をスローしている理由である可能性が非常に高いです。

于 2009-02-19T14:15:09.990 に答える