2016-12-12 5 views
0

私はこのコミュニティに新しいですが、私は頻繁にこの場所で年齢のための私の質問を見上げ、一度も失望していない!しかし、今回は私の問題に対する完璧な道/答え/解決策を見つけるのに苦労しています。私は自分自身で尋ねなければなりません。更新のために定数をチェックするサービスを作成する

Im Quizduellのようなゲームを作成すると、スムーズに実行され、いくつかの友人と多くのラウンドでプレイしています。唯一動作しないのは、「アップデートの確認と、ブート時からシャットダウンまでの間にあるものがあれば私に通知する」というものです。

インターネットですべての時間稼働しているサーバーがあります。 Androidサービスのクライアントは、ニュースがある場合にサーバー上でリクエストする必要があります。アプリケーションはSessionIDとPlayerのIDをサーバーに送信し、名前のみを取得します(Dataconsumptionを小さく保つため)。私はインテントといくつかの闘いがあったので、サービスはSharedPreferencesによってIDとSessionIDを取得します。サービスで通知が表示され、この部分は正常に機能します。アプリケーションへの接続が

それは(SharedPreferencesのほかに)自分でcompletly実行し、存在しない問題は、私は物事を開始する方法を知らない、次のとおりです。

私が発砲すべき放送を、持っています起動します(しかし、もしそうなら、私はAirplanemodechangeでテストして起動しましたが、アプリケーションが実行されていて、これが私の望むものではありません)。これはいつでもサービスを起動するAlarmManagerを開始します。

[BroadcastReceiver(Enabled = true, Process = ":remote", Name = "Broadcasts.UpdateBroadcast")] 
[IntentFilter(new[] { Intent.ActionBootCompleted, Intent.ActionAirplaneModeChanged})] 
public class UpdateBroadcast : BroadcastReceiver 
{ 

public static readonly String TAG = "com.JonQse.Schlauweia.UpdateBroadcast"; 

    public override void OnReceive(Context context, Intent intent) 
{ 

     var updateService = new Intent(context, typeof(UpdateService)); 
     //context.StartService(updateService); 
     PendingIntent _mAlarmSender = PendingIntent.GetService(context, 0, updateService, 0); 
     var am = (AlarmManager)context.GetSystemService(Context.AlarmService); 
     long interval = 1000 * (int)(60 * 0.2); 
     am.SetRepeating(AlarmType.ElapsedRealtimeWakeup, SystemClock.ElapsedRealtime() + interval, interval, _mAlarmSender); 

    } 
} 

これはまったく機能しません。私は理由が分からない。次のことは、あるそれは、少なくとも実行されるように、私は、アプリを起動私はちょうどカント火災放送てmanualyその:

  bool alarmUp = (PendingIntent.GetBroadcast(this, 0, 
    new Intent(this, typeof(UpdateService)), 
    PendingIntentFlags.NoCreate) != null); 

     if(!alarmUp) 
     { 
      var intent = new Intent("Broadcasts.UpdateBroadcast"); 
      SendBroadcast(intent); 
     } 

私はあなたが私を助けることができると思います。私はwoudlntがこの問題について狂ってしまったなら、ここに書きません。

ありがとう!

答えて

0

ここは私のアプリでうまくいきます。 マニフェスト

内のブートを許可する完全な受信機が
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

あなたの機能は、タスクTask.Runを開始

public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId) 

にあなたのサービス内でこの

[BroadcastReceiver] 
    [IntentFilter(new[] { Intent.ActionBootCompleted }, Categories = new[] { Intent.CategoryDefault })] 
    public class BootCompletedIntentReceiver : BroadcastReceiver 
    { 
     public override void OnReceive(Context context, Intent intent) 
     { 
      if (intent.Action == Intent.ActionBootCompleted) 
      { 
       context.StartService(new Intent(context, typeof(YourService))); 
      } 
     } 
    } 

のようになります。この仕事であなたのものをしてください。サービスが破壊されたときに停止するようにしてください。サービスの変数を「完了」し、タスクループでチェックすることができます。ループのあるタスクを必要としない場合は、OnStartCommandでアラームマネージャを起動することもできます。別のサービスを必要としない場合は、指定されたブートレシーバー定義を使用してください。常に起動する必要があります。

関連する問題