2016-01-23 125 views
4

我有一個應用程序應該每六小時更新/從服務器獲取數據。要做到這一點我做了AlarmManager方式如下:如何確保即使android應用程序關閉,AlarmManager也會觸發?

public class Repository { 

public static AlarmManager alarmManager; 

public static void initAlarmManager(Context context){ 

    //start the update alarm manager 
    Intent resultIntent = new Intent(context,AlarmReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

    alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 0, 60 * 60 * 1000, pendingIntent); 
} 

我AlarmReceiver現在要查找更新,如果有它必須通過一個通知,通知用戶特定條件的新數據。這是我AlarmReceiver的一部分:

public class AlarmReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 

    if(Repository.ddfDb == null){ 
     Repository.initDdfDb(context); 
    } 

    if(Repository.alarmManager == null){ 
     Repository.initAlarmManager(context); 
    } 

    for(Episode episode : Repository.ddfDb.getListOfNextEpisodes()){ 
     Notification.showNotification(context,episode); 
    } 
} 

}

因爲我AlarmManager應該運行所有的時間我讓他也開始完成開機的時候。我在MainActivity中的onCreate()

<receiver android:name=".AlarmReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"/> 
     </intent-filter> 
    </receiver> 

我運行函數initAlarmManager():這樣做我增加了以下我的清單文件。所以如果應用程序啓動,AlarmManager也會啓動,一切正常。即使我通過主頁按鈕關閉我的應用程序或通過「最近的應用程序之間的更改」按鈕更改爲其他應用程序,但我的AlarmManager仍然會觸發,並且我收到了通知,儘管我的應用程序位於後臺。

我也在我的AlarmReceiver中運行函數initAlarmManager()。因此,如果我重新啓動手機,接收器會被調用,看到我的AlarmManager是空的,然後進入。所以在這裏一切正常。

但是,這是我的問題:如果我按下「最近的應用程序之間的變化」按鈕,並用刷卡關閉我的應用程序,我的AlarmManager停止,我不會收到任何進一步的通知。這很奇怪,因爲在重新啓動後我的應用程序也不會出現在最近的應用程序菜單中,但它有效。

我GOOGLE了很多,有人說這是不可能的,因爲如果用戶真的想關閉應用程序,他必須能夠這樣做。我明白這一點,因爲它提供了針對病毒應用的安全性。但我也看到WhattsApp能夠通過總是通知的應用程序通知用戶。

那麼真的沒有辦法完成我始終運行的AlarmManager,或者如果有辦法,我該如何實現?

預先感謝您!

+1

出於調試的原因在報警接收器 – raj

+0

中烤麪包,或者確實已經確保我的AlarmManager始終運行? – selmaohneh

+0

嘗試使用即使關閉應用後仍會運行的服務。但它可能會耗盡電池。 – Muthu

回答

1

我解決了這個問題,通過以下方式:

我感動所有的操作我在廣播接收器到IntentService一樣。現在所有的BroadcastReceiver都在啓動這個IntentService。

當應用程序現在通過將其從最近的應用程序菜單上滑開而關閉時,我的通知仍然彈出。

感謝Muthu給我正確的提示!

相關問題