Android中的AlarmManager
我有每天运行的代码;为此,我尝试使用Android中的AlarmManager,android,android-alarms,android-broadcast,Android,Android Alarms,Android Broadcast,我有每天运行的代码;为此,我尝试使用AlarmManager。这是我触发警报的代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent i = new Intent(this, AlarmReciever.class); P
AlarmManager
。这是我触发警报的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent i = new Intent(this, AlarmReciever.class);
PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.cancel(pi); // cancel any existing alarms
am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY,
AlarmManager.INTERVAL_DAY, pi);
}
这部分代码按预期调用了AlarmReceiver
类,但我希望AlarmReceiver
类中的代码每天只执行一次。它被多次调用。我如何限制它
这是AlarmReceiver
类:
public class AlarmReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("in alarm reciever class");
}
}
我试图在onReceive()
方法中执行一些业务逻辑
在manifest.xml文件中:
已声明。我认为您应该使用以下代码设置报警:
Intent i = new Intent(this, AlarmReciever.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0); // <- HERE!!
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.cancel(pi); // cancel any existing alarms
am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY,
AlarmManager.INTERVAL_DAY, pi);
Intent i=新的Intent(这是AlarmReceiver.class);
PendingIntent pi=PendingIntent.getBroadcast(this,0,i,0);//你的意思是它一直在报警吗?@kabut178是的,它一直在报警……我在AlarmReceiver类中有一个sysout,它一直在打印……不像预期的那样一次……你试过使用日历对象作为时间参考吗?@kabut178是的……我也试过日历对象。它显示了相同的结果。@Nate我编辑了我的问题。当使用PendingEvent.getBroadcast()
时,AlarmReceiver
类没有被调用。@AnilM,您需要确保接收器列在AndroidManifest.xml文件中。例如,
。您还可以@AnilM确保清单xml文件中的拼写与代码中的拼写匹配。您实际上拼写的AlarmReceiver
不正确(即。。。但重要的是,拼写当然是匹配的。@AnilM,那么我想还有别的地方出了问题,你没有表现出来。使用pendingent.getBroadcast()
是提醒您的BroadcastReceiver
的正确方法。您是否在日志中查找过有用的消息?