在 android 中使用 AlarmManager 安排服务
scheduling service using AlarmManager in android
我正在尝试使用以下代码通过 AlarmManager
安排服务:
MainActivity
的onCreate()
如下:
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);
我正在尝试使用以下代码通过 AlarmManager
安排服务:
MainActivity
的onCreate()
如下:
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);