2012-03-29 41 views
9

我必須做一個應用程序,我必須在該應用程序中設置日期,並在9點的特定日期,我必須通知您。最簡單的方法是什麼?(即使我重新啓動手機,或取出電池,我也希望應用程序正常工作。)AlarmManager是一種解決方案嗎?在特定日期的Android通知

+12

你怎麼能期望android沒有電池工作? :) – waqaslam 2012-03-29 17:51:47

+0

我的意思是,我仍然可以得到該通知,而無需再次訪問該應用程序 – user1253236 2012-03-29 18:19:01

+0

OP顯然意味着如果他/她取出電池並將其替換。 – 2015-07-09 07:33:32

回答

15

要安排你可以使用AlarmManager

試試這個代碼,它是爲我工作的行動:

1 /聲明的BroadcastReceiver類啓動動作,這個類可以是你的活動中或在其他的java文件之外

public class Receiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     Toast.makeText(context, intent.getStringExtra("param"),Toast.LENGTH_SHORT).show(); 
    } 

} 

2 /裏面的onCreate方法把這個代碼

AlarmManager alarms = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE); 

    Receiver receiver = new Receiver(); 
    IntentFilter filter = new IntentFilter("ALARM_ACTION"); 
    registerReceiver(receiver, filter); 

    Intent intent = new Intent("ALARM_ACTION"); 
    intent.putExtra("param", "My scheduled action"); 
    PendingIntent operation = PendingIntent.getBroadcast(this, 0, intent, 0); 
    // I choose 3s after the launch of my application 
    alarms.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+3000, operation) ; 

啓動你的應用程序a吐司會在3秒後出現,所以你可以用你的喚醒時間來改變「System.currentTimeMillis()+ 3000」。

+0

完美的作品。這應該被接受爲答案。 – user1531978 2013-12-16 12:54:04

3

您應該創建應用程序爲android service

服務是一個應用程序組件,可以在後臺執行長時間運行的 操作,並且不提供用戶界面。 另一個應用程序組件可以啓動服務,並且即使用戶切換到另一個 應用程序,它也會繼續在後臺運行 。此外,組件可以綁定到服務,以便與其進行交互,甚至執行進程間通信(IPC)。例如,服務可能會處理網絡交易,播放音樂,執行文件I/O或與內容提供商交互,所有這些都來自 背景。

1

報警管理器是我猜的解決方案。您應該將鬧鐘管理器設置爲特定時間,然後使其在啓動時調用通知。這應該在服務中實現。我希望它有幫助。

+0

不,它沒有,但無論如何謝謝 – user1253236 2012-04-03 11:43:07

4

您必須使用AlarmManager來設置RTC_WAKEUP類型的報警。

docs

當警報響起時,已被註冊,因爲這是 通過系統廣播的意圖,自動啓動目標程序 如果它尚未運行。而 設備處於睡眠狀態(並且可任選喚醒設備,如果他們在這段時間內熄滅 ),但如果它被關閉並重新啓動 將清除已註冊的警報都將保留。

因此,這意味着:

  • 你並不需要一個持續運行的服務,以實現這一目標。
  • 可能需要一個監聽BOOT_COMPLETE 事件的BroadcastListener以在設備重啓後重新註冊警報。