我有一个服务"GroupsTaskAlarmChecker“,由AlarmManager在onCreate of Groups.class活动中每隔20秒调用一次,如下所示:
int seconds = 20;
Intent myIntent = new Intent(Groups.this, GroupsTaskAlarmChecker.class);
pendingIntent = PendingIntent.getService(Groups.this, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), seconds * 1000, pendingIntent);这个可以完美地工作。但我需要在设备启动时这样做。然后我知道我必须让AndroidManifest像这样:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:name=".ReceiverBoot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED">
<category android:name="android.intent.category.HOME">
</category></action></intent-filter>
</receiver>然后像这样的mi broadcastReceiver:
public class ReceiverBoot extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int seconds = 20;
Intent myIntent = new Intent(context, GroupsTaskAlarmChecker.class);
pendingIntent = PendingIntent.getService(context, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), seconds * 1000, pendingIntent);
}
}但在这个onReceive中,我不知道如何才能像以前一样(使用intent和alarmManager每隔20秒启动一次服务)。该行错误:
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);有没有可能我不能在BroadcastReceiver中创建AlarmManager?
我感谢大家,我是一个机器人乞讨者,我需要你们的帮助。我的英语很抱歉;)
发布于 2013-08-06 20:42:43
总结上面的答案和注释: onReceive处理程序接收可用于访问getSystemService和ALARM_SERVICE的上下文。示例代码:
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Start periodic service.
Calendar cal = Calendar.getInstance();
Intent srvIntent = new Intent(context, MyService.class);
PendingIntent pIntent = PendingIntent.getService(context, 0, srvIntent, 0);
// Use context argument to access service
AlarmManager alarm =
(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
// Repeat every 5 seconds
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
5000, pIntent);
}
}
}使用此代码创建一个新类,当然,将MyReceiver和MyService更改为实现中的名称。
https://stackoverflow.com/questions/15221295
复制相似问题