Cambiar presentación de notificaciones

He descompilado mi aplicación de música del sistema (de Sony Ericsson para Android GB 2.3.7) porque quiero cambiar el diseño de la notificación. Encontré el método que crea la notificación con este código:

private void sendStatusBarNotification(Track paramTrack) { if (paramTrack != null) { NotificationManager localNotificationManager = (NotificationManager)this.mContext.getSystemService("notification"); String str = paramTrack.getArtist(); if ((str == null) || (str.equals(this.mContext.getString(2131361954)))) str = this.mContext.getString(2131361798); Notification localNotification = new Notification(2130837696, paramTrack.getTitle() + " - " + str, System.currentTimeMillis()); localNotification.flags = (0x2 | localNotification.flags); localNotification.flags = (0x20 | localNotification.flags); PendingIntent localPendingIntent = PendingIntent.getActivity(this.mContext, 0, new Intent(this.mContext, MusicActivity.class), 268435456); localNotification.setLatestEventInfo(this.mContext, paramTrack.getTitle(), str, localPendingIntent); localNotificationManager.notify(0, localNotification); } } 

Mi pregunta ahora es: ¿Cómo puedo cambiar el diseño de la notificación? Quiero crear un diseño que se parezca al diseño original de la notificación de Android, pero con una imagen adicional a la derecha de la notificación. ¿Cómo puedo hacer esto?

Primero cree un xml para su notificación.

Custom_notification.xml:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dp" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentLeft="true" android:layout_marginRight="10dp" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/image" style="Custom Notification Title" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/image" android:layout_below="@id/title" style="Custom Notification Text" /> </RelativeLayout> 

Ahora el código java:

 public class MainActivity extends Activity { @SuppressWarnings("deprecation") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int icon = R.drawable.ic_launcher; long when = System.currentTimeMillis(); Notification notification = new Notification(icon, "Custom Notification", when); NotificationManager mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_notification); contentView.setImageViewResource(R.id.image, R.drawable.ic_launcher); contentView.setTextViewText(R.id.title, "Custom notification"); contentView.setTextViewText(R.id.text, "This is a custom layout"); notification.contentView = contentView; Intent notificationIntent = new Intent(this, MainActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); notification.contentIntent = contentIntent; notification.flags |= Notification.FLAG_NO_CLEAR; //Do not clear the notification notification.defaults |= Notification.DEFAULT_LIGHTS; // LED notification.defaults |= Notification.DEFAULT_VIBRATE; //Vibration notification.defaults |= Notification.DEFAULT_SOUND; // Sound mNotificationManager.notify(1, notification); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } } 

Espero que esto funcione para usted.

Editar: También puede visitar si se encuentra con un problema como este .

También, puede visitar aquí para más información.

Editar Abril 26 2016 Puede utilizar NotificationCompat.Builder para crear la instancia de Notification como se indica a continuación:

 NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(icon) .setContent(contentView) .setContentTitle("Custom Notification") .setWhen(when); ... mNotificationManager.notify(1, notificationBuilder.build()); 

Para crear diseños de notificaciones personalizadas, consulte la Guía de la API de Android sobre el tema . Parece que vas a usar la clase RemoteViews .

Aquí he adjuntado una captura de pantalla, el contenido de la primera pantalla de un título de la publicación y cuando hacemos clic en la flecha hacia abajo en el lado derecho del nombre de la aplicación que conduce a la segunda captura de pantalla que es el diseño personalizado para notificación push. Que he diseñado para la mía.

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="4dp" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:orientation="vertical" card_view:cardCornerRadius="5dp" card_view:cardUseCompatPadding="true"> <LinearLayout android:layout_width="match_parent" android:orientation="horizontal" android:background="#80000000" android:layout_height="wrap_content"> <ImageView android:src="@mipmap/ic_launcher" android:layout_width="50dp" android:layout_height="match_parent" android:padding="10dp" android:layout_marginLeft="5dp" android:background="@null" android:layout_gravity="center_vertical|center_horizontal" android:scaleType="centerCrop"/> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:minHeight="48dp" android:paddingBottom="16dp" android:paddingLeft="16dp" android:paddingRight="16dp" android:paddingTop="16dp" android:background="@android:color/transparent" android:textColor="@android:color/white" tools:text="Test"/> </LinearLayout> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="fill_parent" android:adjustViewBounds="true" android:contentDescription="@null" android:scaleType="centerCrop" android:src="@drawable/placeholder"/> </LinearLayout> 

Método para crear notificaciones con diseño personalizado,

 public static void createNotification(String title, String body,String image_url, Context context, int notificationsId, String single_id) { Intent notificationIntent; long when = System.currentTimeMillis(); int id = (int) System.currentTimeMillis(); Bitmap bitmap = getBitmapFromURL(image_url); NotificationCompat.BigPictureStyle notifystyle = new NotificationCompat.BigPictureStyle(); notifystyle.bigPicture(bitmap); RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.custom_notification_layout); contentView.setImageViewBitmap(R.id.image, bitmap); contentView.setTextViewText(R.id.title, body); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.ic_launcher) .setStyle(notifystyle) .setCustomBigContentView(contentView) .setContentText(body); NotificationManager mNotificationManager = (NotificationManager) context .getSystemService(Context.NOTIFICATION_SERVICE); notificationIntent = new Intent(context, SinglePost.class); notificationIntent.putExtra("single_id",single_id); notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent contentIntent = PendingIntent.getActivity(context, id, notificationIntent, 0); Notification notification = mBuilder.build(); notification.contentIntent = contentIntent; notification.flags |= Notification.FLAG_AUTO_CANCEL; notification.defaults |= Notification.DEFAULT_SOUND; notification.defaults |= Notification.DEFAULT_VIBRATE; mNotificationManager.notify(notificationsId, notification); } public static Bitmap getBitmapFromURL(String strURL) { try { URL url = new URL(strURL); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); Bitmap myBitmap = BitmapFactory.decodeStream(input); return myBitmap; } catch (IOException e) { e.printStackTrace(); return null; } } 

Sería bueno si pudiéramos obtener los datos de diseño, ya sea dictado en código o xml.

Saliendo de lo que se proporciona sin embargo, puedo decir que usted tiene que conseguir la imagen y ponerla en la new Notification(2130837696, paramTrack.getTitle() + " - " + str, System.currentTimeMillis()); declaración.

Honestamente eso es todo lo que puedo darte con lo que has proporcionado. ¡La mejor de las suertes!

  • ¿Existe una manera de saber si una notificación se ha expandido o se ha reducido en android
  • Android: PendingIntent de la notificación no activa el onCreate () si se vuelve a activar la actividad en la pantalla
  • TaskStackBuilder causa NoClassDefFoundError en AlarmReceiver
  • Cómo quitar la notificación de la barra de notificación mediante programación en android?
  • Eventos de captura de Android en la notificación (prensa larga)
  • La luz de notificación de Android no funciona
  • Notificaciones de Android: tienen colores en un icono pequeño
  • Botones grises al agregar acciones a notificaciones en Jelly Bean
  • Administrar los objetos View y Class <?> Actuales
  • Cómo manejar correctamente startForegrounds dos notificaciones
  • Cómo detener el tono de llamada de notificación de Android después de 30 segundos?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.