Tôi gặp sự cố với AlarmManager, tôi đặt mã để lập lịch báo thức lặp lại và sau khi chạy ứng dụng, báo thức sẽ hoạt động tốt. Ngay cả khi tôi nhấp vào nút Home (và ứng dụng bị tạm dừng), báo thức vẫn chạy trên khoảng thời gian của nó.Android báo động bị hủy sau khi đóng ứng dụng
Vấn đề là nếu tôi mở Trình quản lý tác vụ và buộc đóng ứng dụng, thì báo thức sẽ ngừng chạy.
Đây có phải là hành vi bình thường không, có cách nào để tránh điều này và giữ cho báo thức chạy sau khi đóng ứng dụng không?
Mã dưới đây - phương thức được gọi bởi lớp ApplicationContext, onCreate(). đang
private void scheduleAlarm() {
if (alarmScheduled == true) { return; } // we only need to schedule once.
int alarmInterval = Def.pref(getApplicationContext()).getInt("alarmInterval", 30);
final Intent intent = new Intent(getApplicationContext(), CollectorAlarmReceiver.class);
final PendingIntent pending = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
AlarmManager alarmMgr = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmMgr.cancel(pending); // cancel others.
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+1000,
alarmInterval*1000, pending);
Def.log(TAG,"scheduleAlarm(): alarm scheduled, interval: "+alarmInterval+" seconds");
alarmScheduled = true;
}
Receiver:
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "CollectorAlarmReceiver invoked, starting CollectorService in background");
context.startService(new Intent(context, CollectorService.class));
Intent collectorService = new Intent(context,CollectorService.class);
collectorService.putExtra("action", CollectorService.ACTION_BACKGROUND_REQUEST_MESSAGES);
context.sendBroadcast(collectorService);
}
Cảm ơn!
Bạn có thể đăng mã nhận và ví dụ về alarmInterval không? – ninjasense
Tôi đã đăng mã cho Người nhận. AlarmInterval là 30 giây. Bạn có thể thấy rằng có một Đăng nhập trên onReceive, vì vậy tôi có thể theo dõi khi Người nhận được gọi. Và trong khi chạy ứng dụng, nó hoạt động tốt, vấn đề là khi nó được đóng lại. –
Tại sao bạn không đặt đồng hồ báo thức trong đồng hồ mặc định của hệ thống. Sau đó, giết nó bằng trình quản lý tác vụ và xem nó có hoạt động như ứng dụng của bạn không. Nếu nó cũng không thể báo động bạn. Tôi nghĩ rằng nó là ok cho ứng dụng của bạn và bạn không cần phải làm bất cứ điều gì. –