2014-08-27 92 views
-1

我試圖設置鬧鐘管理器。下面是我做什麼:Android應用程序關閉時未觸發Android鬧鐘管理器

private static AlarmManager alarmManager; 
private BroadcastReceiver alarmReceiver; 
private PendingIntent alarmIntent; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    alarmReceiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
       Toast.makeText(context, "Hello", Toast.LENGTH_LONG).show(); 
       WakeLocker.acquire(context); 

     } 
    }; 

    registerReceiver(alarmReceiver, new IntentFilter("com.alarm.wakemeup")); 
    alarmIntent = PendingIntent.getBroadcast(this, 0, new Intent("com.alarm.wakemeup"),0); 
    alarmManager = (AlarmManager)(this.getSystemService(Context.ALARM_SERVICE)); 
    SetAlarm(getApplicationContext()); 

} 

public void SetAlarm(Context context) 
{ 
    alarmManager.set(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis() + 
      5000, alarmIntent); 


} 

這工作得很好,當我剛剛鎖定屏幕:手機喚醒和吐司5秒後寫在屏幕上。但是,當我顯式退出應用程序時,警報管理器不會被觸發。有什麼建議麼?

謝謝

+2

我認爲它是由於它在onCreate中註冊。當你退出應用程序時,它的實例是不會被銷燬的?在清單中註冊。 – 2014-08-27 11:44:08

+0

@Dhruti你是對的,那個作品謝謝你! – yrazlik 2014-08-27 11:59:03

+0

偉大的:)快樂編碼。 – 2014-08-27 12:01:08

回答

1

正如我在comment中所說的,您需要將接收器註冊到清單文件中。

這樣即使您的應用程序已關閉,我也可以工作。

,當您退出應用程序作爲其在onCreate

希望這有助於創建您的接收器的實例被銷燬。

+0

我也想添加一個它會在手機重新啓動後不會觸發的事情。再次您需要手動啓動它。我錯了@Dhruti? – 2014-08-27 12:09:06

+0

@ShabbirDhangot你是對的,當手機重新啓動時,鬧鐘將被擦除。我會盡力處理它。 – yrazlik 2014-08-27 12:13:31

+0

@MysticMagicϡ如何在清單中註冊接收者? – Jeongbebs 2016-04-06 02:40:24

1

爲此使用static receiver。您正在將接收器註冊到活動中,這會在應用程序未運行時破壞。那接收機怎麼會聽你的報警。

因此,註冊接收機到清單。即使您的應用程序未運行,它也會偵聽警報。

+0

工作,謝謝! – yrazlik 2014-08-27 11:59:48

0

這是下一階段的答案...

如果你想處理您的服務重新啓動後,您需要使用WakefulIntent。這個示例代碼以及文檔中的內容將被清除。

Github去與這個知識庫將解決您的所有問題。

我從這個混帳使用DEMO2。

Dhruti答案是完美的。 我希望這也會有幫助。