根据您的代码示例,您可以简单地返回一个相同的 PendingIntent,您可以使用它来设置警报和取消警报。您列出的 getBroadcast 行将允许您执行此操作:
PendingIntent.getBroadcast(getApplicationContext(), 2, alarmintent, PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA);
有关更完整的示例,请参阅以下 IntentSender 和 AlarmReceiver 类:
public class IntentSender extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pending_intent);
Button setAlarmButton = (Button) findViewById(R.id.set_alarm_button);
Button cancelAlarmButton = (Button) findViewById(R.id.cancel_alarm_button);
setAlarmButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
final Intent alarmintent = new Intent(IntentSender.this, AlarmReceiver.class);
final AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
final PendingIntent sender1 = getPendingIntent(alarmintent);
alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, sender1);
}
});
cancelAlarmButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
final Intent alarmintent = new Intent(IntentSender.this, AlarmReceiver.class);
final AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
final PendingIntent sender1 = getPendingIntent(alarmintent);
alarmManager.cancel(sender1);
}
});
}
private PendingIntent getPendingIntent(final Intent alarmintent) {
return PendingIntent.getBroadcast(getApplicationContext(), 2, alarmintent, PendingIntent.FLAG_UPDATE_CURRENT |
Intent.FILL_IN_DATA);
}
}
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Received the broadcast!", Toast.LENGTH_SHORT).show();
}
}
这是一个带有两个按钮的布局,您可以单击它们来设置和取消警报:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/set_alarm_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Set Alarm" />
<Button
android:id="@+id/cancel_alarm_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cancel Alarm" />
</LinearLayout>
继续尝试一下。单击“设置警报”按钮,等待 2 秒钟,您应该会看到一个 Toast。要进行第二次测试,请单击“设置警报”,然后快速单击“取消警报”。您应该不会看到 Toast 消息。