Android 计划每2分钟报警一次

Android 计划每2分钟报警一次,android,alarms,Android,Alarms,在我的活动课上 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); AlarmManager alarmManager=(AlarmManager) getSystemService(ALARM_SERVICE); Intent

在我的活动课上

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        AlarmManager alarmManager=(AlarmManager) getSystemService(ALARM_SERVICE);
        Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
        alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,System.currentTimeMillis(),2000, pendingIntent);

    }
以及AlarmReceiver类中的OnReceive函数

     @Override
     public void onReceive(Context context, Intent intent)
      {   
        //get and send location information
         System.out.println("fired");
      }
我使用的是Nexus4,kitkat版本。我没有看到任何onreceive函数每2分钟启动一次。nthg正在发生。。。 有什么帮助吗?多谢各位




我只是把我的舱单也放进去了

在您的代码中,您可以这样设置报警

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            System.currentTimeMillis(),
            2000,
            pendingIntent);
间隔时间错误,每两分钟运行一次,您应该写:

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            0,
            1000 * 60 * 2,
            pendingIntent);
编辑

对于挂起的意图,设置flag
pendingent.flag\u UPDATE\u CURRENT
,并查看它是否改变了任何内容

PendingIntent alarmIntent = PendingIntent.getBroadcast(context,
            0,
            intent,
            PendingIntent.FLAG_UPDATE_CURRENT);

在setRepeating函数中,应使用SystemClock.elapsedRealTime()进行已用\u实时\u唤醒。 此外,您需要将2000更改为2*60*1000以指定间隔时间

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                          SystemClock.elapsedRealtime(),
                          2*60*1000, 
                          pendingIntent);
希望这有帮助

参考:

编辑: 在您的清单文件中,您的接收人姓名有一个输入错误。 将“.AlarmReceiver”更改为“.AlarmReceiver”



您是否已将报警接收器类名放入清单中?设置为4个参数,而不是3个。我将代码放在此处,但它不起作用。简单的应用程序,只是打印出警报它不工作,我的项目在这里,如果你想检查it@user3278732我检查了你的项目,发现你的清单文件中有一个输入错误。我刚刚更新了我的答案。非常感谢,这就解决了问题。现在我正在研究另一个问题。在姜饼中,警报管理器快速启动,在kitkat中,警报管理器在32秒后启动。。当我做这个10*60*1000@user3278732我想这是由于SystemClock.elapsedRealtime()造成的。它返回启动后的毫秒数。因此,在你的情况下,我猜姜饼的启动时间比kitkat的快。还有一个问题,如果我进入应用程序200次。。。报警管理器会被新创建的报警管理器覆盖,对吗?我不会有100个报警管理器,对吗?
PendingIntent alarmIntent = PendingIntent.getBroadcast(context,
            0,
            intent,
            PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                          SystemClock.elapsedRealtime(),
                          2*60*1000, 
                          pendingIntent);
<receiver
    android:name=".AlarmReceiver"
    android:exported="true" >
</receiver>