Android 创建带警报的重复服务
我尝试在我的应用程序中创建一个服务,每天下午2点更新数据。我想设置一个重复警报,触发服务为我获取数据。这与UI线程无关,即使在应用程序关闭时也应该可以工作 我似乎无法开始我的服务 这是我创建报警的活动中的代码Android 创建带警报的重复服务,android,android-service,android-alarms,Android,Android Service,Android Alarms,我尝试在我的应用程序中创建一个服务,每天下午2点更新数据。我想设置一个重复警报,触发服务为我获取数据。这与UI线程无关,即使在应用程序关闭时也应该可以工作 我似乎无法开始我的服务 这是我创建报警的活动中的代码 Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 20); // HOUR cal.set(Calendar.MINUTE, 0); // MIN cal.set(Cal
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 20); // HOUR
cal.set(Calendar.MINUTE, 0); // MIN
cal.set(Calendar.SECOND, 0); // SEC
Intent intent = new Intent(Main.this, VenueUpdater.class);
PendingIntent pintent = PendingIntent.getService(Main.this, 0, intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent);
然后我的服务课
public class VenueUpdater extends Service{
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
Toast.makeText(this, "Create", Toast.LENGTH_SHORT).show();
Log.i("SERVICE", "onCreate");
}
@Override
public void onDestroy() {
Toast.makeText(this, "Destroy", Toast.LENGTH_SHORT).show();
Log.i("SERVICE", "onDestroy");
}
@SuppressWarnings("deprecation")
@Override
public void onStart(Intent intent, int startid) {
super.onStart(intent, startid);
Toast.makeText(this, "Start", Toast.LENGTH_SHORT).show();
Log.i("SERVICE", "onStart");
}
}
在我关闭应用程序标记之前的清单中
<service android:enabled="true" android:name="services.VenueUpdater" />
</application>
我检查了一些其他示例和代码,其中我使用了服务,代码看起来不错,但仍然不起作用。另外,我想知道是否有更好的方法来实现这一点,因为同一个警报可能会被多次创建,但可能有一个挂起的意图标志,我可以用来检查它是否没有。在服务子类中,使用onstartcomad
方法来启动所有服务例程。不是onStart/onCreate。
2) 以下是我的AndroidManife示例:
<service android:name=".service.AlertService" />
3) pendingent
如果使用相同的requestCode
(getService
方法的第二个参数)和flagpendingent,则它将与前一个(即重叠alam)重叠。flag\u UPDATE\u CURRENT
用作最后一个参数
试试看。1)在Service
子类中,使用onStartCommad
方法启动所有服务例程。不是onStart/onCreate。
2) 以下是我的AndroidManife示例:
<service android:name=".service.AlertService" />
3) pendingent
如果使用相同的requestCode
(getService
方法的第二个参数)和flagpendingent,则它将与前一个(即重叠alam)重叠。flag\u UPDATE\u CURRENT
用作最后一个参数
试试看。您已将闹钟设置为在晚上8点而不是下午2点响:
cal.set(Calendar.HOUR_OF_DAY, 20); // HOUR
如果您想确保您的报警没有被安排多次,您可以在设置报警之前取消任何以前安排的报警,如下所示:
alarm.cancel(pintent);
此外,此对报警管理器的调用:
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent);
将设置您的闹钟在晚上8点响,然后每隔30秒响一次。这就是你想要的吗
编辑显示如何将警报设置为每天下午2点重复一次
要将警报安排为每天下午2点重复一次,请使用以下命令:
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pintent);
您已将闹钟设置为晚上8点响,而不是下午2点响:
cal.set(Calendar.HOUR_OF_DAY, 20); // HOUR
如果您想确保您的报警没有被安排多次,您可以在设置报警之前取消任何以前安排的报警,如下所示:
alarm.cancel(pintent);
此外,此对报警管理器的调用:
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent);
将设置您的闹钟在晚上8点响,然后每隔30秒响一次。这就是你想要的吗
编辑显示如何将警报设置为每天下午2点重复一次
要将警报安排为每天下午2点重复一次,请使用以下命令:
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pintent);
onStart()
已被弃用,但仍然有效onCreate()
在服务中首次创建时(在调用构造函数之后)被调用。onStart()
已被弃用,但仍然有效onCreate()
在服务中首次创建时(在调用构造函数之后)被调用。不,我希望它每天只运行一次,每次运行2次,我将一天的小时设置为晚上8点,只是为了用当前时间进行测试。在接下来的5分钟里,我会用时间来测试,如果有效的话,我会回来接受答案。不,我只想每天2个小时测试一次,我把一天的时间设置为晚上8点,只是为了用当前时间来测试。我将在接下来的5分钟内进行测试,如果有效,我会回来接受答案。