我有一个小应用程序,可用于设置未来事件的提醒。该应用程序使用 AlarmManager 来设置提醒用户的时间。当警报响起时,BroadcastReceiver 会对此进行注册,然后启动服务以通过 toast 和状态栏中的通知通知用户。
为了在通知和 toast 中显示正确的信息,一些额外的信息与意图一起传递。首次注册提醒时,BroadcastReceiver 接收并传递给服务的信息是正确的。但是对于随后的每个提醒(即广播接收器接收到的每个新意图),即使发送的信息不同,该信息也保持不变。
例如,如果字符串“foo”作为第一个意图的额外内容,则广播接收器会正确提取“foo”。如果在第二个意图中添加了“bar”,则广播接收器仍会提取“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);
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);
}
清单中的意图过滤器:
<receiver android:name=".AlertReceiver">
<intent-filter>
<action android:name="com.aspartame.quickAlert.ACTION_SET_ALARM" />
</intent-filter>
</receiver>
我已经坚持了一段时间了,非常感谢您的帮助!