与所有的意图,但第一个接收额外不正确(Incorrect extras received with

2019-08-17 05:58发布

我有一个可用于为未来事件的提醒一个小应用程序。 该应用使用了AlarmManager设置当用户需要提醒的时间。 当警报响起时,一个BroadcastReceiver注册该反过来启动的服务通过一个烤面包和在状态栏中的通知,通知用户。

为了显示在通知和烤面包的正确的信息,一些额外的信息与意图传承下去。 提醒注册的第一次,由广播接收器接收,并传送到服务的信息是正确的。 但对于每个以下提示(即由广播接收器接收到的每一个新的意图)该信息保持不变,即使发送的信息是不同的。

举个例子,如果字符串“foo”被置为一个额外的与第一目的,“foo”被正确地广播接收器提取。 如果“酒吧”在第二意图把作为一个额外的,“富”仍是由广播接收器提取。

这是注册报警并传递意图(主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() - 在广播接收器类方法:

@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>

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

Answer 1:

尝试添加FLAG_UPDATE_CURRENTPendingIntent ,当你通过创建getBroadcast()



Answer 2:

以上答案是正确的,但他们缺乏一个解释。 值得一提的,这部分的PendingIntent文档 :

甲的PendingIntent本身是简单地通过描述用于检索它的原始数据的系统所维护的令牌的引用。 ...如果创建的应用程序后重新获取同类的PendingIntent的(相同的操作,目的相同的动作,数据,类别和组件,以及相同的标志),它将接收代表同样一个的PendingIntent

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



Answer 3:

我已经在这个题目中最好的链接: 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)


文章来源: Incorrect extras received with all intents but the first one