Android 创建带警报的重复服务

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

我尝试在我的应用程序中创建一个服务,每天下午2点更新数据。我想设置一个重复警报,触发服务为我获取数据。这与UI线程无关,即使在应用程序关闭时也应该可以工作

我似乎无法开始我的服务

这是我创建报警的活动中的代码

    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
方法的第二个参数)和flag
pendingent,则它将与前一个(即重叠alam)重叠。flag\u UPDATE\u CURRENT
用作最后一个参数

试试看。

1)在
Service
子类中,使用
onStartCommad
方法启动所有服务例程。不是onStart/onCreate。 2) 以下是我的AndroidManife示例:

<service android:name=".service.AlertService" />

3)
pendingent
如果使用相同的
requestCode
getService
方法的第二个参数)和flag
pendingent,则它将与前一个(即重叠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分钟内进行测试,如果有效,我会回来接受答案。