我有一个可用于为未来事件的提醒一个小应用程序。 该应用使用了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>
我一直坚持用了一段时间了,所以帮助是非常感谢!