2016-07-24 108 views
0

我的應用程序使用AlarmManager和BroadcastReceiver類來安排警報。如果應用程序完全關閉,BroadcastReceivers會啓動嗎?

它的工作原理是如果應用程序運行或背景,但如果它被完全殺死,似乎事件不會被解僱。

接收者調用一個IntentService,它調用帶有某些參數的Maps REST API,然後在通知中顯示格式化的輸出。該服務不使用AsyncTask,因爲它已經是後臺線程。

此外,如果應用程序不在調試中,是否有一種很好的方法來檢查Receiver或Service是否被調用?

+0

你是怎麼註冊的接收器? – 2016-07-24 15:48:21

+0

它在清單中。我不確定哪個部分不管是接收者,數據下載,意向服務還是通知邏輯,都是不誠實的。它有時有效,但有時候不行。猜測需要創建一個寫入數據庫的記錄器,並查看哪個邏輯實際上被觸發。 – 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 */));