8

sto implementando una notifica in stile Lollipop a un lettore di musica in streaming app FTP utilizzando la nuova classe Notification.MediaStyle. Sto impostando l'album art come la mia "grande icona".Dimensioni di MediaStyle LargeIcon

Dato che la copertina è presa direttamente dal file attualmente in riproduzione, la dimensione di questo album varia a seconda della fonte (potenzialmente fino a 5000x5000).

Dal mio codice pre-lecca-lecca decodifico la bitmap in una dimensione massima definita da: android.R.dimen.notification_large_icon_width
e
android.R.dimen.notification_large_icon_height

che funziona bene come il tempo di decodifica è molto più veloce e l'utilizzo della memoria è l'ideale.

Tuttavia, quando questo codice viene applicato al mio stile MediaStyle, la vista espansa utilizza un'icona molto più grande di quella definita dai parametri di quota risultante in una copertina dell'album sfocata quando espansa.

v'è una certa costante per definire la dimensione massima vista espansa per una grande icona MediaStyle può essere? O c'è qualche soluzione a questo problema? Così com'è attualmente, è inaccettabile per l'arte da decodificare a piena risoluzione in quanto può provocare l'applicazione in crash a causa di OOM.

+0

ho avuto lo stesso problema !! In Lollipop la bitmap decodificata appare molto più "grande" del pre-lollipop, ma con la stessa bitmap e lo stesso codice sorgente. Hai avuto qualche risposta o soluzione? – Christian

+0

@Christian non ha ottenuto risposte o soluzioni alternative ... a partire dagli eventuali grafica per un 'MediaStyle' viene visualizzata come sfondo per la lockscreen, ho scelto di decodificare fino alla dimensione massima del dispositivo. Anche se questo potrebbe non essere l'ideale ... – initramfs

risposta

2

Da Lollipop codice sorgente posso vedere dimensione dell'immagine è 128dp, vedi notification_template_material_big_media.xml on GitHub:

<!-- Layout to be used with only max 3 actions. It has a much larger picture at the left side--> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/status_bar_latest_event_content" 
    android:layout_width="match_parent" 
    android:layout_height="128dp" 
    android:background="#00000000" 
    android:tag="bigMediaNarrow" 
    > 
    <ImageView android:id="@+id/icon" 
     android:layout_width="128dp" 
     android:layout_height="128dp" 
     android:scaleType="centerCrop" 
     /> 

    <!-- ...Nothing interesting for us futher... --> 

</RelativeLayout> 

Questo è per la layout espanso con 3 o meno pulsanti di azione. Guardando al Notification.MediaStyle.getBigLayoutResource(int) on GrepCode, se ci sono più pulsanti sembra notification_template_material_big_media.xml viene utilizzato:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/status_bar_latest_event_content" 
    android:layout_width="match_parent" 
    android:layout_height="128dp" 
    android:background="#00000000" 
    android:tag="bigMedia" 
    > 
    <include layout="@layout/notification_template_icon_group" 
     android:layout_width="@dimen/notification_large_icon_width" 
     android:layout_height="@dimen/notification_large_icon_height" 
     /> 

    <!-- ...Nothing interesting for us futher... --> 

</RelativeLayout> 

E notification_template_icon_group.xml assomiglia a questo:

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:internal="http://schemas.android.com/apk/prv/res/android" 
    android:layout_width="@dimen/notification_large_icon_width" 
    android:layout_height="@dimen/notification_large_icon_height" 
    android:id="@+id/icon_group" 
    > 
    <ImageView android:id="@+id/icon" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginTop="12dp" 
     android:layout_marginBottom="12dp" 
     android:layout_marginStart="12dp" 
     android:layout_marginEnd="12dp" 
     android:scaleType="centerInside" 
     /> 
    <ImageView android:id="@+id/right_icon" 
     android:layout_width="16dp" 
     android:layout_height="16dp" 
     android:padding="3dp" 
     android:layout_gravity="end|bottom" 
     android:scaleType="centerInside" 
     android:visibility="gone" 
     android:layout_marginEnd="8dp" 
     android:layout_marginBottom="8dp" 
     /> 
</FrameLayout> 

Potete trovare notification_large_icon_width e notification_large_icon_height in .../res/values/dimens.xml:

<!-- The width of the big icons in notifications. --> 
<dimen name="notification_large_icon_width">64dp</dimen> 
<!-- The width of the big icons in notifications. --> 
<dimen name="notification_large_icon_height">64dp</dimen> 

Quindi la risposta finale - 128 dpi per layout espanso con 3 o meno azioni ttons e 64DP se ci sono più di 3.