設定したい壁紙をユーザーが選択できる機能も備えたアプリを作ろうとしていました。私はギャラリーインテントを呼び出すことによってこれを管理しました。ユーザーが特定の画像を選択すると、画像のデータパスが返され、画像を画像ビューに設定してユーザーにプレビューします。
画像サイズ(および/または解像度)がAndroidの予想よりも大きい場合、問題が発生します。これにより、モジュールに障害が発生します。
そして、これでは不十分であるかのように、ユーザーが他の壁紙を選択しようとすると(私のテストケースでは、「他の」壁紙のサイズも700kbを超えていました)、アプリが「OutOfMemoryException」でクラッシュします...
ここで私を助けてください!!!
ギャラリーインテントの場合、私は以下を使用します。
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),SELECT_IMAGE);
私が使用する壁紙を設定するために:
InputStream is = getContentResolver().openInputStream(Uri.parse(uri_returned_from_intent));
Bitmap bgImage = BitmapFactory.decodeStream(is);//OutOfMemory error thrown here
setWallpaper(bgImage);
だから私は対処すべき2つの問題があります:
- 壁紙として設定する前に画像を切り抜く方法...
- OutOfMemoryExceptionがスローされることを理解できません。私の画像サイズはどれも1MBを超えていません...そして、Mが間違っていなければN1の場合のVMバジェットは24Mbだと思います...