使用 VisualStudio 和 Xamarin 工作,只有 < 2 周的 Android 经验。
我有一个 IntentService 类,我想使用警报来启动它。 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(i);
需要标识符;类是关键字
Intent i = new Intent(this.StoreLocationService.class );
我希望有人能看到明显的错误。我希望我对使用 StartService(Intent Service) 启动服务的 MainActivity 中的 Alarm 有正确的想法。
附加问题:我要启动的服务执行一次性位置跟踪事件。虽然我希望计时器/闹钟在屏幕关闭时工作以进行此跟踪,但我认为我不能因此依赖主要 Activity 。对还是错?
我有第二个服务,我稍后会做。它将此数据同步到本地数据库
最佳答案
编辑:好的,在阅读 Xamarin 之后,看起来这可能有助于预期的 Identifier;类是关键字
错误:
StartService(new Intent(this, typeof(StoreLocationService)));
引用资料:
Xamarin android SendBroadcast from IntentService not received by Activity
编辑 2:
我还刚刚注意到 Xamarin 与 AlarmManagers 有一些差异 getSystemService
应该是 GetSystemService
,而且看起来你需要一个 PendingIntent
(这Java 中的 AlarmManager
也需要)。
一般例子:
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);
查看这篇文章:https://forums.xamarin.com/discussion/16111/setting-alarmmanager-to-repeat-given-a-specific-time
还有这篇文章:http://forums.xamarin.com/discussion/7490/alarm-manager
关于Android AlarmManager 报警启动服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29271472/