我創建了一個名爲「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();
爲什麼你說** MainActivity.Context **行'alarmManager =(AlarmManager)MainActivity.Context.getSystemService(Context.ALARM_SERVICE);'。而不是構建一個構造函數並將上下文傳遞給它並將該上下文用作'context.getSystemService(Context.ALARM_SERVICE);' – Pankaj
它是對應用程序上下文的靜態引用。但這不應該是個問題,對吧? –