gpt4 book ai didi

Android:从 NotificationManager 操作 PendingIntent 调用 IntentService

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:02 25 4
gpt4 key购买 nike

我有一个推送通知应用程序。当推送通知到来时,BroadcastReceiver 调用 GCMIntentService 设置通知

mNotificationManager = (NotificationManager) this
.getSystemService(Context.NOTIFICATION_SERVICE);
Intent intent = new Intent(this, HomeActivity.class);
Intent intent = new Intent(this, AddToCalendarIntentService.class);
intent.putExtra(JSON_KEY_CLASS_ID, classid);
intent.putExtra(JSON_KEY_CLASS_NAME, classname);
intent.putExtra(Config.JSON_KEY_DATE, tgl);
intent.putExtra(Config.JSON_KEY_TIME_START, timestart);
intent.putExtra(Config.JSON_KEY_TIME_END, timeend);
intent.putExtra(Config.JSON_KEY_VENUE, venue);
Log.d(LOG_TAG, classid + ", " + classname + ", " + venue);
PendingIntent contentIntent = PendingIntent.getService(this, 0,
intent, 0);

NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_notif)
.setContentTitle("Re: " + classname)
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(pesan))
.setContentText(pesan)
.setDefaults(NotificationCompat.DEFAULT_VIBRATE)
.setDefaults(NotificationCompat.DEFAULT_LIGHTS)
.setDefaults(NotificationCompat.DEFAULT_SOUND)
.addAction(R.drawable.ic_action_add_person, "Add to Calendar", contentIntent)
.setAutoCancel(true)
.setTicker("Reschedule Class");

mBuilder.setContentIntent(contentIntent);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());

当用户单击“添加到日历”时,它会调用 PendingIntent 以使用所有参数启动 AddToCalendarIntentService。

public class AddToCalendarIntentService extends IntentService {

public AddToCalendarIntentService() {
super("AddToCalendarIntentService");
}

@Override
protected void onHandleIntent(Intent intent) {
final String JSON_KEY_CLASS_NAME = "classname";
final String JSON_KEY_CLASS_ID = "classid";
Bundle extra = intent.getExtras();
String title = extra.getString(JSON_KEY_CLASS_NAME);
String location = extra.getString(Config.JSON_KEY_VENUE);
String tgl = extra.getString(Config.JSON_KEY_DATE);
String[] tglSplit = tgl.split("-");
int year = Integer.parseInt(tglSplit[0]);
int month = Integer.parseInt(tglSplit[1]);
int date = Integer.parseInt(tglSplit[2]);

String timestart = extra.getString(Config.JSON_KEY_TIME_START);
String timeend = extra.getString(Config.JSON_KEY_TIME_END);
String[] start = timestart.split(":");
String[] end = timeend.split(":");
int hourStart = Integer.parseInt(start[0]);
int minStart = Integer.parseInt(start[1]);
int hourEnd = Integer.parseInt(end[0]);
int minEnd = Integer.parseInt(end[1]);
Log.d("INTENT SERVICE", location);
TaskHelper.addToCalendar(this, "Reschedule: " + title, location, year, month-1, date, hourStart, minStart, hourEnd, minEnd);
NotificationManager mNotification = (NotificationManager) this
.getSystemService(Context.NOTIFICATION_SERVICE);
mNotification.cancel(1);
}
}

代码有效,但如果我再次收到另一个通知,并将其添加到日历中,AddToCalendarIntentService 中的参数将保留旧参数,忽略新参数。例如,第一个位置是印度尼西亚GCMIntentServiceAddToCalendarIntentService 日志都显示印度尼西亚

在第二个通知中,位置是新加坡,它在GCMIntentService中正确显示,但是在登录AddToCalendarIntentService时,它显示印度尼西亚(应该是新加坡)

请帮忙。

谢谢。

最佳答案

这是因为系统认为它是同一个 PendingIntent,如果你想有几个 pending Intent,你需要区分它们。

最简单的方法是提供不同的请求代码(PendingIntent.getService 的第二个参数)。

您可以在这里阅读更多相关信息:

http://developer.android.com/reference/android/app/PendingIntent.html

关于Android:从 NotificationManager 操作 PendingIntent 调用 IntentService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26688937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com