Risposte:
Ciò è dovuto al fatto che tutte le modifiche a RemoteViews vengono serializzate (ad esempio setInt e setImageViewBitmap). Le bitmap vengono inoltre serializzate in un bundle interno. Sfortunatamente questo pacchetto ha un limite di dimensioni molto ridotto.
Puoi risolverlo ridimensionando le dimensioni dell'immagine in questo modo:
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;
}
Scegli newHeight per essere abbastanza piccolo (~ 100 per ogni quadrato che dovrebbe occupare sullo schermo) e usalo per il tuo widget e il tuo problema sarà risolto :)
Puoi comprimere la bitmap come un array di byte e quindi decomprimerla in un'altra attività, come questa.
Comprimere!!
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();
setresult.putExtra("BMP",bytes);
Uncompress !!
byte[] bytes = data.getByteArrayExtra("BMP");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
Il buffer delle transazioni di Binder ha una dimensione fissa limitata, attualmente 1Mb, che è condivisa da tutte le transazioni in corso per il processo. Di conseguenza, questa eccezione può essere generata quando sono in corso molte transazioni anche quando la maggior parte delle singole transazioni sono di dimensioni moderate.
fare riferimento a questo collegamento
Vedi la mia risposta in questo thread.
intent.putExtra("Some string",very_large_obj_for_binder_buffer);
Stai superando il buffer di transazione del binder trasferendo uno o più elementi di grandi dimensioni da un'attività a un'altra.
L'approccio giusto consiste nell'usare setImageViewUri()
(più lentamente) o setImageViewBitmap()
e ricreare RemoteView
i messaggi di posta elettronica ogni volta che si aggiorna la notifica.