android – 在特定时间取消重复警报
作者:互联网
我希望在特定时间取消2个重复警报,但应用程序当前决定在您创建警报后立即调用取消.例如,如果您在13:18设置结束重复的时间,则重复警报应重复,直到该时间为止.
以下是我一直在玩的一些代码:
Toast.makeText(this, "Alarm Scheduled for " + midnight, Toast.LENGTH_LONG).show();
AlarmManager Databackon = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Databackon.set(AlarmManager.RTC_WAKEUP,midnight, stoprepeat(V));
// Databackon.set(AlarmManager.RTC_WAKEUP,midnight, PendingIntent.getBroadcast(this,4, intent, PendingIntent.FLAG_UPDATE_CURRENT));
Toast.makeText(this, "THIS " + midnight, Toast.LENGTH_LONG).show();
/*
Button button1=(Button)findViewById(R.id.startupdates);
button1.setVisibility(View.INVISIBLE);
Button button2=(Button)findViewById(R.id.stopbutton);
button2.setVisibility(View.VISIBLE);
*/
}
public PendingIntent stoprepeat(View V)
{
Intent intent = new Intent(UpdatesActivity.this,AlarmReciever.class);
PendingIntent pendingIntent =
PendingIntent.getBroadcast(this,1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.cancel(pendingIntent);
Intent intent2 = new Intent(UpdatesActivity.this,DataOff.class);
PendingIntent pendingIntent2 =
PendingIntent.getBroadcast(this,2, intent2,PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am2 = (AlarmManager) getSystemService(ALARM_SERVICE);
am2.cancel(pendingIntent2);
Toast.makeText(this, "Repeating Alarm stopped", Toast.LENGTH_LONG).show();
Button button1=(Button)findViewById(R.id.startupdates);
button1.setVisibility(View.VISIBLE);
Button button2=(Button)findViewById(R.id.stopbutton);
button2.setVisibility(View.INVISIBLE);
return pendingIntent;
}
解决方法:
你的代码毫无意义.你必须记住三件基本的事情:
>所有警报都链接到特定应用程序.
>警报功能基于待处理的意图.
>取消可以通过匹配特定的Intent来完成.
考虑到这一点,您可以实现以下解决方案.
像往常一样创建基本警报:
Intent myIntent = new Intent(this, Target.class);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, time, pendingIntent);
创建另一个警报,负责取消并将pendingIntent从第一个警报发送到它:
Intent cancellationIntent = new Intent(this, CancelAlarmBroadcastReceiver.class);
cancellationIntent.putExtra("key", pendingIntent);
PendingIntent cancellationPendingIntent = PendingIntent.getBroadcast(this, 0, cancellationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, time, cancellationPendingIntent, PendingIntent.FLAG_UPDATE_CURRENT);
CancelAlarmBroadcastReceiver的位置如下:
public class CancelAlarmBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
PendingIntent pendingIntent = intent.getParcelableExtra("key");
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.cancel(pendingIntent);
}
}
我没有检查它,但我认为它应该工作.
标签:repeatingalarm,android,alarmmanager 来源: https://codeday.me/bug/20190722/1506794.html