2016-12-01 71 views
2

這裏是我在應用程序類中的代碼oncreate方法:但我看不到任何來自我的應用程序的消息。任何人都可以幫助我做到這一點?我該如何設置每5秒重複報警以顯示消息

Intent alarmIntent = new Intent(this, AlarmReceiver.class); 
pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0); 
public void startAlarm() { 
    manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    int interval = 5000; 

    manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent); 
    Toast.makeText(this, "Alarm Set", Toast.LENGTH_SHORT).show(); 
} 

And on the broadcast receiver class I have the following code 

public class AlarmReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context arg0, Intent arg1) { 
    // For our recurring task, we'll just display a message 
    Toast.makeText(arg0, "I'm running", Toast.LENGTH_SHORT).show(); 

} 

}

回答

0

編輯答案

使用setInexactRepeating()而不是setRepeating()setRepeating只需要設置最短間隔INTERVAL_FIFTEEN_MINUTES。 setInexactRepeating()是設置重複間隔短至1000毫秒,或5000毫秒的唯一方法。

變化:

manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent); 

manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent); 
+0

@ Nick Friskel,謝謝你的回覆。但我宣佈了AlarmManger,但我沒有包括它。我的問題是使用AlarmManager獲取消息,每隔5秒在logcat中不使用服務類。我用Timer和處理器做了它,但我沒有得到它的效率。 – Hiwot

+0

我已經編輯了答案:) –

+0

我按你說的做,但沒有任何變化:(。 – Hiwot

0

如果你沒有得到你所需要的確切5秒延遲,你需要使用一個處理程序。任何類型的延遲時間爲5秒的鬧鐘都無法正常工作,因爲從Android 5.x開始,基本上所有重複鬧鐘都不準確以節省電池壽命。我已修改您的代碼以使用處理程序:

startAlarm();

public void startAlarm() { 
    final Handler h = new Handler(); 
    final int delay = 5000; //milliseconds 

    h.postDelayed(new Runnable(){ 
     public void run(){ 
      //do something 

      Intent alarmIntent = new Intent(getApplicationContext(), AlarmReceiver.class); 
      sendBroadcast(alarmIntent); 

      h.postDelayed(this, delay); 
     } 
    }, delay); 
} 

即報警方法將當前的廣播接收器的工作,做一個實際的5秒延遲。