画像を表示する前に大きすぎる場合に備えて画像の幅と高さを取得しようとしています。私のメソッドは画像のURIを受け取りますが、BitmapFactoryを使用してデコードしようとすると、常にFileNotFoundExceptionが発生します。ここでAndroid:FileNotFoundException Uriから画像を取得しようとしたとき
私のコードのサンプルです:
Uri myUri;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(new File(myUri.getPath()).getAbsolutePath(), options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
デコードファイルのリターンはここにFileNotFoundExceptionをスローします。しかし、私はまだこれを使用してビットマップファクトリを使用せずにURIを使用して画像を表示することができます。
Uri myUri;
Bitmap myBitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), myUri);
このコードの問題は、大きな画像を使用する際に返されたビットマップがOutOfMemoryErrorが発生の原因となる可能性があるということです。
私は私のウリをデバッグするとき、私はこれを取得:
内容://com.android.providers.media.documents/document/image%3A20472
UPDATE ||ここには作業コード
Uri myUri;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
// This is the part that changed
InputStream inputStream = context.getApplicationContext().getContentResolver().openInputStream(myUri);
BitmapFactory.decodeStream(inputStream,new Rect(),options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
もちろんこれはtry/catchで囲まれています。
私はAndroidを使って遊んでからしばらくしていますが、FileNotFoundExceptionであるため、返す値が正確にわかるように「new File(myUri.getPath())。getAbsolutePath()」を試してみましたか?そこには何か変わったことがあるかもしれません。 – hennign
myUriについての詳しい情報が必要です。 //com.android.providers.media.documents/document/image%3A20472はこの文脈でどのような内容を意味するのかわかりません。 – hennign