回答:
これは、RemoteViewへのすべての変更がシリアル化されているために発生します(たとえば、setIntおよびsetImageViewBitmap)。ビットマップも内部バンドルにシリアル化されます。残念ながら、このバンドルには非常に小さなサイズ制限があります。
次のように画像サイズを縮小することで解決できます。
public static Bitmap scaleDownBitmap(Bitmap photo, int newHeight, Context context) {
final float densityMultiplier = context.getResources().getDisplayMetrics().density;
int h= (int) (newHeight*densityMultiplier);
int w= (int) (h * photo.getWidth()/((double) photo.getHeight()));
photo=Bitmap.createScaledBitmap(photo, w, h, true);
return photo;
}
newHeightを十分に小さく(画面に表示される正方形ごとに100まで)選択し、ウィジェットに使用すると、問題は解決されます:)
ビットマップをバイトの配列として圧縮し、次のような別のアクティビティで圧縮解除できます。
圧縮!!
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();
setresult.putExtra("BMP",bytes);
解凍!!
byte[] bytes = data.getByteArrayExtra("BMP");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);