Android:是否可以使用带有API 10的NotificationCompat实现带有自定义控件的通知?

时间:2013-11-26 06:53:37

标签: java android notifications android-2.3-gingerbread

我的具体问题是我正在尝试使用NotificationCompat.Builder构建自定义通知布局,并使用setOnClickPendingIntent将操作发送到作为我的应用程序的一部分运行的服务。

基本上我可以将特定的RemoteViews对象应用到通知中,这一切都很好,但是当我尝试为RemoteViews对象中的小部件调用setOnClickPendingIntent()时(例如, ImageButton)它会创建格式错误的通知,该通知在logcat中被捕获为IllegalArgumentException

当我尝试为API设置onClickPendingIntents时> 10,它没有真正的麻烦,但姜饼它打破了通知。 (它允许我构建布局,但onClick待定意图不起作用),正如关于此问题的评论中所述: https://code.google.com/p/android/issues/detail?id=30495

在之前的SO响应中,CommonsWare在两年前说“功能从来就不存在”。 (Android: setOnClickPendingIntent in a statusbar notification on Gingerbread

这仍然是真的吗?如果我想将通知按钮放在与API 10一起使用的布局中,我基本上是SOL吗?

1 个答案:

答案 0 :(得分:0)

试试这个:

private void generateNotification(Context context, String message) {

int icon = R.drawable.ic_launcher;
long when = System.currentTimeMillis();
String appname = context.getResources().getString(R.string.app_name);
NotificationManager notificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
Notification notification;
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
new Intent(context, myactivity.class), 0);

// To support 2.3 os, we use "Notification" class and 3.0+ os will use
// "NotificationCompat.Builder" class.
 if (currentapiVersion < android.os.Build.VERSION_CODES.HONEYCOMB) {
 notification = new Notification(icon, message, 0);
 notification.setLatestEventInfo(context, appname, message,
 contentIntent);
 notification.flags = Notification.FLAG_AUTO_CANCEL;
 notificationManager.notify(0, notification);

 } else {
 NotificationCompat.Builder builder = new NotificationCompat.Builder(
 context);
 notification = builder.setContentIntent(contentIntent)
 .setSmallIcon(icon).setTicker(appname).setWhen(0)
 .setAutoCancel(true).setContentTitle(appname)
 .setContentText(message).build();

 notificationManager.notify(0 , notification);
 }
 }

希望这有帮助。