错误的额外收到的所有意图,但该第一个
-
19-09-2019 - |
题
我有一个小的应用程序,它可以用来设置提醒未来的事件。该应用程序使用的一个AlarmManager设定时间用户应该提醒。当报警器响起,BroadcastReceiver注册这一点,并在开始服务通知用户通过一个烤面包和一个通知。
为了显示正确的信息,在通知和面包,一些额外的信息传递的意图。第一次是提醒注册,信息接收由BroadcastReceiver并传递给该服务是正确的。但是对于每个以下提醒(即每一个新的意图,收到的BroadcastReceiver)这一信息的保持相同,即使当发送的信息是不同的。
作为一个例子,如果串"foo"是把作为一个额外的第一个意图,"foo"是正确地提取由BroadcastReceiver.如果"条"是把它作为一个额外的第二意图,"foo"仍是取的BroadcastReceiver.
这是代码,登记的警报和通过的的意图(主ui-类):
Intent intent = new Intent(ACTION_SET_ALARM);
intent.putExtra("desc", desc);
intent.putExtra("time", time);
intent.putExtra("dbId", dbId);
intent.putExtra("millis", millis);
PendingIntent pIntent = PendingIntent.getBroadcast(quickAlert.this, 0, intent, 0);
// Schedule the alarm!
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, millis, pIntent);
该onReceive()-方法在BroadcastReceiver类:
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, AlertService.class);
String desc = intent.getStringExtra("desc").equals("") ? "": ": " + intent.getStringExtra("desc");
String time = intent.getStringExtra("time");
long dbId = intent.getLongExtra("dbId", -1);
long millis = intent.getLongExtra("millis", -1);
i.putExtra("desc", desc);
i.putExtra("time", time);
i.putExtra("dbId", dbId);
i.putExtra("millis", millis);
Log.d(TAG, "AlertReceiver: " + desc + ", " + time + ", " + dbId + ", " + millis);
Toast.makeText(context, "Reminder: " + desc, Toast.LENGTH_LONG).show();
context.startService(i);
}
意图-的过滤器在清单:
<receiver android:name=".AlertReceiver">
<intent-filter>
<action android:name="com.aspartame.quickAlert.ACTION_SET_ALARM" />
</intent-filter>
</receiver>
我一直坚持这一段时间,以帮助是非常感谢!
解决方案
尝试在创建它添加 FLAG_UPDATE_CURRENT
您PendingIntent
经由getBroadcast()
。
其他提示
上面的答案是正确的,但他们缺乏的解释。值得注意的的PendingIntent文档:
一个的PendingIntent本身是简单地通过描述用于检索它的原始数据的系统所维护的令牌的引用。 ...如果所述创建应用程序后重新检索相同种类的PendingIntent的(相同的操作,同样的意图的动作,数据,类别,和组件,和相同的标志)时,将接收表示同一令牌的PendingIntent
请注意 “额外” 的数据是特别的不强>包括在的PendingIntent身份的概念!
最好的链接我已经找到关于这一主题: http://alvinalexander.com/source-code/android/android-how-attach-extra-intent-pendingintent-notification-solution-example
这是线索:
int uniqueInt = (int) (System.currentTimeMillis() & 0xfffffff);
PendingIntent.getService(context, uniqueInt, intent, 0)