【问题标题】:scheduling service using AlarmManager in android在android中使用AlarmManager调度服务
【发布时间】:2015-05-02 07:23:03
【问题描述】:

我正在尝试使用以下代码通过AlarmManager 安排服务:

MainActivityonCreate()如下:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
   /*
    if(isMyServiceRunning(MyService.class)) {
        Toast.makeText(this, "Service already Running", Toast.LENGTH_LONG).show();
    }
    else{
        startService(new Intent(getBaseContext(), MyService.class));
    }
    */
    AlarmManager alarmManager;
    PendingIntent alarmIntent;
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    int hour = 12;
    int minutes = 14;
    alarmManager = (AlarmManager) getSystemService(context.ALARM_SERVICE);
    Intent i = new Intent (getBaseContext(), AlarmReceiver.class);
   // Intent i = new Intent();
   // i.setClass(getBaseContext(),MyService.class);
   // alarmIntent = PendingIntent.getService(getBaseContext(), 0, i, 0);
    alarmIntent = PendingIntent.getBroadcast(getBaseContext(), 0, i, 0);
    calendar.set(Calendar.HOUR_OF_DAY, hour);
    calendar.set(Calendar.MINUTE, minutes);
    alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), AlarmManager.INTERVAL_DAY, alarmIntent);
}

AlarmReceiver如下:

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
            context.startService(new Intent(context, MyService.class));
    }
}

我也试过PendingIntent.getService(),在代码中可见。

服务已按要求启动,但未安排...请提出建议。

或者,是不是因为setInexactRepeating 不准确……在那种情况下,我需要等待多长时间。

【问题讨论】:

  • 任何更短的方法来检查是否设置了alarmManager..我相信你可以认出我是新手

标签: android service alarmmanager scheduling


【解决方案1】:

你必须使用

alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent);

而不是

alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), AlarmManager.INTERVAL_DAY, alarmIntent);

【讨论】:

  • 检查中,还没有反应.....除了等待服务启动之外,您能建议其他方法来检查是否设置了警报
  • 在重复 adb shell dumpsys 警报时,我可以看到 WHEN 的值从 9m 变为 4 sec 到目前的 23h59m,但服务尚未启动..
  • 为什么要使用 getBaseContext()?尝试将您的活动用作上下文。
  • 我的错误,我没有在清单中定义接收器,现在......能够同时启动服务和广播接收器。谢谢@Roman Zhukov
猜你喜欢
  • 2014-01-19
  • 1970-01-01
  • 2023-03-11
  • 2012-06-13
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多