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
的正确方法。您是否在日志中查找过有用的消息?