Android AlarmManager警报启动服务

时间:2015-03-26 05:08:14

标签: android android-intent xamarin

使用Xamarin在VisualStudio中工作,只有< 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); 
    
  • 预期的标识符; class是关键字

    Intent i = new Intent(this.StoreLocationService.class );
    

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


其他问题:我想要启动的服务是一次性的位置跟踪事件。虽然我希望计时器/闹钟能够在屏幕关闭时进行此跟踪,但我认为我不能依赖主要活动。错了还是对吗?

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

1 个答案:

答案 0 :(得分:1)

编辑:好的,在阅读了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,而且看起来你需要一个PendingIntentAlarmManager需要{ 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);

请参阅此帖子:https://forums.xamarin.com/discussion/16111/setting-alarmmanager-to-repeat-given-a-specific-time

这篇文章:http://forums.xamarin.com/discussion/7490/alarm-manager