Yanıtlar:
Bunun nedeni, RemoteViews'taki tüm değişikliklerin serileştirilmesidir (örn. SetInt ve setImageViewBitmap). Bitmapler ayrıca dahili bir paket halinde serileştirilir. Maalesef bu paketin çok küçük bir boyut sınırı var.
Görüntü boyutunu şu şekilde küçülterek çözebilirsiniz:
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;
}
Yeterince küçük olması için newHeight'ı seçin (ekranda alması gereken her kare için ~ 100) ve widget'ınız için kullanın, probleminiz çözülecektir :)
Bit eşlemi bir bayt dizisi olarak sıkıştırabilir ve ardından bunun gibi başka bir etkinlikte açabilirsiniz.
Kompres!!
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();
setresult.putExtra("BMP",bytes);
Sıkıştırmasını !!
byte[] bytes = data.getByteArrayExtra("BMP");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
Binder işlem tamponu, işlem için devam eden tüm işlemler tarafından paylaşılan şu anda 1Mb olan sınırlı bir sabit boyuta sahiptir. Sonuç olarak, münferit işlemlerin çoğu orta büyüklükte olsa bile devam eden birçok işlem olduğunda bu istisna atılabilir.
bu bağlantıya bakın
Doğru yaklaşım, bildirimi her güncellediğinizde s kullanmak setImageViewUri()
(daha yavaş) veya setImageViewBitmap()
ve yeniden oluşturmaktır RemoteView
.