2016-07-27 9 views
0

私のバックグラウンドサービスは、デバイスのジオデータをAPIに送信させます。AlarmManagerがすぐに起動する

private static long LOCATION_INTERVAL = 1800000; 

位置サービスと、AlarmManagerの間隔とします。

私はその後、この

 Intent i = new Intent(this, typeof(LocationService)); 
     PendingIntent pending = PendingIntent.GetService(this, 1, i, 
              PendingIntentFlags.CancelCurrent); 

     AlarmManager alarm = (AlarmManager)GetSystemService(AlarmService); 
     alarm.SetExact(AlarmType.RtcWakeup, 30000, pending); 

ようMainActivityで火災最初のアラーム、サービス自体に、私はすべての時間、この

 Intent intent = new Intent(this, typeof(LocationService)); 
     PendingIntent pending = PendingIntent.GetService(this, 100, intent, 
              PendingIntentFlags.CancelCurrent); 
     AlarmManager alarm = (AlarmManager)GetSystemService(AlarmService); 
     alarm.SetExact(AlarmType.RtcWakeup, 
         LOCATION_INTERVAL, pending); 

問題のようにアラームトリガーを再:サービスを取得しますあまりにも早すぎる(+/-毎分!)。

質問:アラームマネージャをLOCATION_INTERVALに固定するにはどうすればよいですか?

+0

...それは全体の日付を(だけではなく間隔)を表す数値です... 2番目のパラメータはミリ秒単位の日付であることに注意してください? – Shaishav

+0

@ Shaishavこれは 'return StartCommandResult.Sticky; 'を返します。 – Saphire

+0

NON_STICKYで試してみてください。 xamarin同等物が何であれ。 – Shaishav

答えて

2

下記の解決策をご確認いただき、結果をお知らせください。

動作しない場合は、私は答えを削除する....

ISSUE

私はエラーがここにあると信じて:

alarm.SetExact(int type, long triggerAtMillis, PendingIntent operation); 

triggerAtMillis:そのミリ秒単位の時間適切なクロックを使用してアラームをオフにする必要があります(アラームの種類によって異なります)。

したがって、あなたはtriggerAtMillisとして1800000を使用しています。ただし、1800000の日付はUTCで表示されます。Thu Jan 01 1970 00:30:00

これは古い日付なので、すぐにアラームが発生します。

ソリューション

次のようにたぶん、あなたはあなたのコードを更新する必要があります

をMainActivityでは、私はあなたがすぐにアラームを起動したいと考えています。だから、次のように作成します。あなたのサービスで

alarm.SetExact(AlarmType.RtcWakeup, Calendar.getInstance().getTimeInMillis(), pending); 

を、あなたが1800000後にアラームをトリガーにしたいようです。

alarm.SetExact(AlarmType.RtcWakeup, Calendar.getInstance().getTimeInMillis() + LOCATION_INTERVAL, pending); 

この方法では、アラームが現在の時刻(現在の時刻+ LOCATION_INTERVAL)の30分後に解雇されますので、あなたが使用する必要があります。

サービスの `onStartCommandは()`を返すいただきまし

+0

これはどちらもうまくいかないようです。アラームは決して呼ばれません。 – Saphire

+0

しかし、アラームは30分後に発射されます...テストするには、間隔を減らす必要があります... – W0rmH0le

+0

どの間隔ですか?位置の間隔? – Saphire

関連する問題