2016-07-24 10 views
0

私のアプリは、AlarmManagerとBroadcastReceiverクラスを使用してアラームをスケジュールします。アプリが完全に停止している場合、BroadcastReceiversが起動しますか?

アプリが実行中でもバックグラウンドでも動作しますが、完全に強制終了された場合は、イベントが発生していないようです。

受信者は、いくつかのパラメータを使用してMaps REST APIを呼び出すIntentServiceを呼び出し、フォーマットされた出力を通知に表示します。 AsyncTaskは既にバックグラウンドスレッドであるため、サービスはAsyncTaskを使用せずにこれを行います。

また、アプリケーションがデバッグ状態でない場合に受信者またはサービスが呼び出されるかどうかを確認する良い方法はありますか?

+0

どのように受信機を登録していますか? –

+0

マニフェストにあります。受信者、データダウンロード、インテントサービス、または通知ロジックのいずれであっても、正直なところが分からない部分はわかりません。それは時には動作しますが、他の時ではありません。DBに書き込むロガーを作成し、実際にどのロジックが起動されるかを確認する必要があります。 – allanx2000

答えて

2

あなたのBroadcastReceiverがアプリが死んでもインテントを受け取らなければならない場合は、AndroidManifest.xmlで目的のインテントに登録する必要があります。

このように、BroadcastReceiverはあなたのアプリのライフサイクルから独立しています。

この方法で、あなたのBroadcastReceiverとすぐに目的の意図は、いくつかのアプリ

のAndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest> 
    ... 

    <application> 
     .... 
     <receiver android:name=".MyCustomBroadcastReceiver"> 
      <intent-filter> 
       <action android:name="com.example.mytestapp.MY_CUSTOM_INTENT" /> 
      </intent-filter> 
     </receiver> 
    </application> 
</manifest> 

MyCustomBroadcastReceiver.java

で放送されたようアンドロイドによって自動的に通知されます
public class MyCustomBroadcastReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if(intent != null) { 
      String action = intent.getAction(); 
      if(action != null) { 
       if(action.equals("com.example.mytestapp.MY_CUSTOM_INTENT")) { 
        // DO YOUR STUFF 
       } 
      } 
     } 
    } 
} 

あなたのアラームマネージャを作成する際に以下のコードを使用し、その後

テントアラームの作成:

Intent intentForAlarmManager = new Intent("com.example.mytestapp.MY_CUSTOM_INTENT"); 

PendingIntent.getBroadcast(/* CONTEXT */, /* ID */ , intentForAlarmManager, /* FLAGS */)); 
関連する問題