更改通知布局

我反编译了我的系统音乐应用程序(来自索尼爱立信for Android GB 2.3.7),因为我想更改通知布局。 我find了使用此代码创建通知的方法:

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); } } 

我现在的问题是:如何更改通知布局? 我想构建一个看起来像原始Android通知布局但在通知右侧有一个额外图像的布局。 我怎样才能做到这一点?

Solutions Collecting From Web of "更改通知布局"

首先为您的通知创建一个xml。

custom_notification.xml:

      

现在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; } } 

希望这件事适合你。

编辑:如果您遇到这样的问题,也可以访问。

此外,您可以访问此处获取更多信息。

编辑2016年4月26日您可以使用NotificationCompat.Builder创建Notification实例,如下所示:

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

这里我附上了一个截图,第一个屏幕内容是post的标题,当我们点击应用名称右侧的向下箭头时,它会导致第二个截图,即推送通知的自定义布局。以下是示例布局我为我设计的。

 < ?xml version="1.0" encoding="utf-8"?>        

使用自定义布局创建通知的方法,

 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; } } 

要创建自定义通知布局,请查看有关此主题的Android API指南。 看起来你将要使用RemoteViews类。

如果我们能够获得布局数据,无论是代码还是xml,都会很好。

尽管如此,我可以说你必须得到图像并将其放入new Notification(2130837696, paramTrack.getTitle() + " - " + str, System.currentTimeMillis()); 宣言。

老实说,这就是我能用你所提供的东西给你的全部。 祝你好运!