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);
}
现在我收到以下错误:
必须有一个 return 类型
StartService(i);
需要标识符; class是关键字
Intent i = new Intent(this.StoreLocationService.class );
我希望有人能看到明显的错误。我希望我对使用 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
编辑 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
使用 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);
}
现在我收到以下错误:
必须有一个 return 类型
StartService(i);
需要标识符; class是关键字
Intent i = new Intent(this.StoreLocationService.class );
我希望有人能看到明显的错误。我希望我对使用 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
编辑 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