2010-06-27 36 views
9

Tôi muốn một sự kiện để kích hoạt mỗi giờ (lúc 5:00, 6:00, 7:00, v.v ...). Tôi đã thử với một dịch vụ nền tảng bền vững với một sợi nhưng nó không phải là giải pháp phù hợp vì:AlarmManager - Cách lặp lại báo thức ở đầu mỗi giờ?

  • tiêu thụ pin
  • chấm dứt dịch vụ, do quản lý bộ nhớ android

Vì vậy, tôi đang cố gắng với AlarmManager. Nó hoạt động nếu tôi đặt báo thức để kích hoạt trong X giây (sử dụng phương thức "set"). Nhưng làm thế nào tôi có thể lặp lại một sự kiện (sử dụng phương thức "setRepeating") ở đầu mỗi giờ, cho đến khi báo thức bị hủy?

Cảm ơn!

Trả lời

15

Khi bạn đặt báo thức, bạn có hai lần: Thời gian kích hoạt đầu tiên và khoảng thời gian kích hoạt tiếp theo.

Sau đó, bạn phải tính các mili giây còn lại cho đầu giờ tiếp theo, sau đó đặt một giờ cho khoảng thời gian lặp lại.

// We want the alarm to go off 30 seconds from now. 
long firstTime = SystemClock.elapsedRealtime(); 
firstTime += remainingMilisecondsToTopHour; 
long a=c.getTimeInMillis(); 

// Schedule the alarm! 
AlarmManager am = (AlarmManager)ctx.getSystemService(Context.ALARM_SERVICE); 
am.setRepeating(AlarmManager.ELAPSED_REALTIME, 
c.getTimeInMillis(), 1*60*60*1000, sender); 
+0

Ok, đây là cách tiếp cận chính xác. Cảm ơn;) – daliz

+1

+1 Câu trả lời hay. Bạn đã cứu ngày của tôi. Cảm ơn bạn rất nhiều! Cảm ơn một lần nữa. – Sajmon

+6

Mã này có vẻ hơi không rõ ràng. c đến từ đâu? tại sao là một tạo ra, sau đó không bao giờ được sử dụng? –

Các vấn đề liên quan