Jawaban:
Ini disebabkan karena semua perubahan pada RemoteView adalah serial (mis. SetInt dan setImageViewBitmap). Bitmap juga diserialkan menjadi bundel internal. Sayangnya bundel ini memiliki batasan ukuran yang sangat kecil.
Anda dapat mengatasinya dengan memperkecil ukuran gambar dengan cara ini:
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;
}
Pilih newHeight agar cukup kecil (~ 100 untuk setiap persegi yang seharusnya ada di layar) dan gunakan untuk widget Anda, dan masalah Anda akan terpecahkan :)
Anda dapat mengompresi bitmap sebagai larik byte dan kemudian mengekstraknya di aktivitas lain, seperti ini.
Kompres!!
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();
setresult.putExtra("BMP",bytes);
Buka kompres !!
byte[] bytes = data.getByteArrayExtra("BMP");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
Buffer transaksi Binder memiliki ukuran tetap terbatas, saat ini 1Mb, yang digunakan bersama oleh semua transaksi yang sedang berlangsung untuk proses tersebut. Konsekuensinya, pengecualian ini dapat dilakukan ketika ada banyak transaksi yang sedang berlangsung bahkan ketika sebagian besar transaksi individual berukuran sedang.
lihat tautan ini
Pendekatan yang tepat adalah menggunakan setImageViewUri()
(lebih lambat) atau setImageViewBitmap()
dan membuat ulang RemoteView
setiap kali Anda memperbarui notifikasi.