2015-10-22 49 views
1

我創建了一個名爲「VIAlarmManager」的類,並在那裏創建了一個AlarmManager並設置了一些屬性。但不管怎麼樣,鬧鐘並沒有被解僱,我做錯了什麼?我嘗試調用在給定時間間隔內重複的任務(例如1分鐘/ 2分鐘/ 15分鐘),還應該在睡眠中執行該任務。AlarmManager不觸發onReceived

這裏是我的代碼:

public final class VIAlarmManager{ 

public static AlarmManager alarmManager; 
public int freq = 60; 

public VIAlarmManager(int freq_in_sec){ 
    this.freq = freq_in_sec; 
} 

public void setFrequency(int freq_in_sec){ 
    this.freq = freq_in_sec; 
} 

public void setAlarm(){ 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.add(Calendar.MINUTE, 1); 
    alarmManager = (AlarmManager) MainActivity.Context.getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(MainActivity.Context, VIAlarmManager.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.Context, 0, intent, 0); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),1000 * 60 * 1, pendingIntent); 
} 

public void cancleAlarm(){ 
    Intent intent = new Intent(MainActivity.Context, VIAlarm_Heartbeat.class); 
    PendingIntent sender = PendingIntent.getBroadcast(MainActivity.Context, 0, intent, 0); 
    AlarmManager alarmManager = (AlarmManager) MainActivity.Context.getSystemService(Context.ALARM_SERVICE); 
    alarmManager.cancel(sender); 
} 




public static class VIAlarm_Heartbeat extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.w("AlarmManager", "Calling Heartbeat now"); 
     MainActivity.beat.beat(); 
    } 
}} 

我AndroidManifest包含此行:

<receiver android:name="com.videro.util.VIAlarmManager$VIAlarm_Heartbeat" android:enabled="true" ></receiver> 

而在我的主要活動我打電話:

AlarmManager = new VIAlarmManager(60); 
AlarmManager.setAlarm(); 
+1

爲什麼你說** MainActivity.Context **行'alarmManager =(AlarmManager)MainActivity.Context.getSystemService(Context.ALARM_SERVICE);'。而不是構建一個構造函數並將上下文傳遞給它並將該上下文用作'context.getSystemService(Context.ALARM_SERVICE);' – Pankaj

+0

它是對應用程序上下文的靜態引用。但這不應該是個問題,對吧? –

回答

0

如果它是一個簡單的報警你要求,傳統的方法是使用活動TimePicker選擇時間和廣播接收器踢一起報警連同服務發送通知給用戶。

Here是一個工作方式,你如何做到這一點!希望它有助於:)

+0

嗯,基本上我需要每1/2/15分鐘調用一個函數,即使設備處於深度睡眠中,也必須調用該函數 –