警报管理器未触发

时间:2015-06-14 16:52:06

标签: android alarmmanager

在我的代码中,setRepeating()方法上的Interval(第三个参数)似乎没有每5秒触发一次。

它随着时间的推移而不断增加,它就像第一个或第二个大部分时间一样,但其他人在40+secs

之后开火

那么这里有什么问题?

public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent i = new Intent(this, MainActivity2Activity.class);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent pi = PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE );
    am.setRepeating(RTC_WAKEUP,System.currentTimeMillis(),1000*5,pi);
      }

  }

3 个答案:

答案 0 :(得分:1)

看看这里:http://developer.android.com/reference/android/app/AlarmManager.html#setRepeating(int, long, long, android.app.PendingIntent)

当你每5秒发射一次警报时:

注意:对于计时操作(刻度,超时等),使用Handler更容易,也更有效。

您的代码没问题。您遇到的延迟说明可能是:

注意:从API 19开始,所有重复警报都不准确。如果您的应用程序需要精确的交付时间,那么它必须使用一次性精确警报,每次重新安排如上所述。 targetSdkVersion早于API 19的旧应用程序将继续将所有警报(包括重复警报)视为精确警报。

答案 1 :(得分:0)

根据我的理解,您在创建MainActivity.class 5秒后尝试运行MainActivity2Activity.class。

我建议您在待处理的意图中使用FLAG_UPDATE_CURRENT而不是FLAG_CANCEL_CURRENT 。 FLAG_CANCEL_CURRENT将保留您的第一个待定意图并且不会更新或创建新意图,除非您先取消原始待处理意图。 使用FLAG_UPDATE_CURRENT将确保每次执行MainActivity.class时更新挂起的intent,以便在创建MainActivity.class 5秒后准确触发挂起的intent。

希望这有帮助。

答案 2 :(得分:0)

基本上你写了 PendingIntent.FLAG_CANCEL_CURRENT 而不是 PendingIntent.FLAG_ONE_SHOT

警报管理器

设置警报的代码
AlarmManager alarmManager = (AlarmManager) getBaseContext().getSystemService(ALARM_SERVICE);
Intent i1 = new Intent(this, ReceiveAlarmActivity.class);
i1.putExtra("Key", "Value");
PendingIntent operation = PendingIntent.getActivity(getBaseContext(), 0, i1, PendingIntent.FLAG_ONE_SHOT);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Your_Date.getTime(), 5000 operation);

您必须传递 日期

完成