在 android 中使用 AlarmManager 安排服务

scheduling service using AlarmManager in android

我正在尝试使用以下代码通过 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.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent);

而不是

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