Respuestas:
Esto se debe a que todos los cambios en los RemoteViews se serializan (por ejemplo, setInt y setImageViewBitmap). Los mapas de bits también se serializan en un paquete interno. Desafortunadamente, este paquete tiene un límite de tamaño muy pequeño.
Puede resolverlo reduciendo el tamaño de la imagen de esta manera:
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;
}
Elija newHeight para que sea lo suficientemente pequeño (~ 100 por cada cuadrado que debería tomar en la pantalla) y utilícelo para su widget, y su problema se resolverá :)
Puede comprimir el mapa de bits como una matriz de bytes y luego descomprimirlo en otra actividad, como esta.
¡¡Comprimir!!
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();
setresult.putExtra("BMP",bytes);
Descomprimir !!
byte[] bytes = data.getByteArrayExtra("BMP");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
El búfer de transacciones de Binder tiene un tamaño fijo limitado, actualmente 1 Mb, que es compartido por todas las transacciones en curso para el proceso. En consecuencia, esta excepción se puede lanzar cuando hay muchas transacciones en curso, incluso cuando la mayoría de las transacciones individuales son de tamaño moderado.
referir este enlace
El enfoque correcto es usar setImageViewUri()
(más lento) o setImageViewBitmap()
y recrear RemoteView
los mensajes de correo electrónico cada vez que actualice la notificación.