收到所有意图,但第一个不正确的额外收入

我有一个小的应用程序,可以用来设置提醒未来的事件。 该应用程序使用AlarmManager来设置提醒用户的时间。 当警报closures时,广播接收器注册该广播接收器,然后启动一个服务,通过在状态栏中的敬酒和通知来通知用户。

为了在通知和吐司中显示正确的信息,一些额外的信息与意图一起传递。 第一次注册提醒时,BroadcastReceiver接收到的并传递给服务的信息是正确的。 但是,对于以下每个提醒(即BroadcastReceiver收到的每个新意图),即使发送的信息不同,此信息也保持不变。

例如,如果将string“foo”作为第一个意图的附加字符,“foo”将被BroadcastReceiver正确提取。 如果在第二个意图中将“bar”作为附加,则“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); 

BroadcastReceiver类中的onReceive()方法:

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

清单中的意图filter:

 <receiver android:name=".AlertReceiver"> <intent-filter> <action android:name="com.aspartame.quickAlert.ACTION_SET_ALARM" /> </intent-filter> </receiver> 

我一直坚持这一段时间,所以帮助非常感谢!

Related of "收到所有意图,但第一个不正确的额外收入"

尝试通过getBroadcast()创buildFLAG_UPDATE_CURRENTPendingIntent

以上答案是正确的,但是没有解释。 值得注意的是PendingIntent文档的这一部分:

PendingIntent本身就是对由系统维护的令牌的简单描述,该令牌用于检索原始数据。 …如果以后创build的应用程序重新获取相同types的PendingIntent(相同的操作,相同的Intent操作,数据,类别和组件,以及相同的标志),它将会收到代表相同标记的PendingIntent

请注意,“额外”数据明确包括在PendingIntent-identity的概念中!

最好的链接我发现这个主题: 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)