我的具体问题是我正在尝试使用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吗?
答案 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);
}
}
希望这有帮助。