Android AlarmManager 警报启动服务

Android AlarmManager Alarm to start Service

使用 VisualStudio 和 Xamarin 工作,只有不到 2 周的经验 Android。

我有一个 IntentService class,我想使用警报来启动它。 IntentService 的优点是线程化,它会在完成工作后停止。我不明白如何使用 AlarmManager 实现警报。我正在关注 This Tutorial 并使用 ELAPSED_REALTIME_WAKEUP 示例。

此代码在 OnCreate() 下的 MainActivity 中

     AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
     Intent intent = new Intent(this, startTrackingService());


     alarmMgr.SetInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,             
     trackingSetting,
     trackingSetting, intent);


     public void startTrackingService() {
     Intent i = new Intent(this, StoreLocationService.class ); //
     StartService(i);
        }

现在我收到以下错误:

我希望有人能看到明显的错误。我希望我对使用 StartService(Intent Service) 启动服务的 MainActivity 中的 Alarm 有正确的想法。


附加问题:我要启动的服务执行一次性位置跟踪事件。虽然我希望 timer/alarm 在屏幕关闭时工作以进行此跟踪,但我认为我不能因此依赖主 activity。对还是错?

我有第二个服务,我稍后会做。它将此数据同步到本地数据库

编辑:好的,在阅读 Xamarin 之后,看起来这可能有助于解决 Identifier expected; class is a keyword 错误:

StartService(new Intent(this, typeof(StoreLocationService)));

参考文献:

Xamarin android SendBroadcast from IntentService not received by Activity

http://developer.xamarin.com/guides/android/application_fundamentals/backgrounding/part_2_android_services/

编辑 2: 我还注意到 Xamarin 与 AlarmManagers getSystemService 应该是 GetSystemService 有一些不同,而且看起来你需要一个 PendingIntent(这是 AlarmManager 所需要的) Java 还有)。

一般示例:

Intent i = new Intent(this, typeof(StoreLocationService));
PendingIntent pintent = PendingIntent.GetService(this, 0, i, 0);
AlarmManager alarmMgr = (AlarmManager) this.GetSystemService(Context.AlarmService);
alarmMgr.SetInexactRepeating(AlarmType.RtcWakeup, trackingSetting, trackingSetting, pintent);

看到这个post:https://forums.xamarin.com/discussion/16111/setting-alarmmanager-to-repeat-given-a-specific-time

还有这个 post:http://forums.xamarin.com/discussion/7490/alarm-manager