9

Tôi sử dụng Báo thức để tìm nạp dữ liệu từ máy chủ. Tôi muốn cung cấp cho người dùng tùy chọn để bắt đầu và dừng báo thức. Điều này có nghĩa là tôi phải kiểm tra xem liệu báo thức đã được đặt chưa. Tôi tìm thấy một số mã mà nói với tôi nếu báo động đã được thiết lập:Android AlarmQuản lý sự cố với cài đặt và đặt lại báo thức

Intent I = new Intent(getApplicationContext(),AlarmReceiver.class); 
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_NO_CREATE); 
found = (P!=null); 

nếu Alarm đã được thiết lập tôi hủy bỏ nó, nhưng nếu nó không được thiết lập sau đó tôi đặt nó (giống như một chuyển đổi)

Vấn đề là điều này chỉ hoạt động một lần. Lần đầu tiên mã trên để kiểm tra các báo động hiện tại sẽ trả lại null cho biết không có báo thức nhưng sau khi tôi hủy báo thức khi nó trả về một con trỏ cho một cái gì đó nhưng báo động không hoạt động.

đây là đoạn code để thiết lập báo động

am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE); 
Intent I = new Intent(getApplicationContext(),AlarmReceiver.class); 
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_CANCEL_CURRENT); 
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60000, P); 

và đây là đoạn code để hủy bỏ một báo động:

am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE); 
Intent I = new Intent(getApplicationContext(),AlarmReceiver.class); 
PendingIntent P = PendingIntent.getBroadcast(getApplicationContext(), 0, I, PendingIntent.FLAG_CANCEL_CURRENT); 
am.cancel(P); 

Tôi có để thiết lập lại một cái gì đó sau khi huỷ một báo thức để làm cho nó PendingIntent đi .

+1

Tôi không thực sự chắc chắn lý do tại sao bạn đang thực hiện việc kiểm tra để xem nếu một báo động đã tồn tại. Bạn có thể giải thích lý do của bạn được không? –

+0

Tôi muốn có một nút hoạt động như một nút bật/tắt. Cũng sử dụng nút làm chỉ báo nếu cài đặt báo thức của tôi bị mất do lỗi ứng dụng. Tôi sử dụng báo thức để cập nhật tiện ích khi người dùng nhấp vào tiện ích con để mở hoạt động mà người dùng có thể xem liệu báo thức có được đặt hay không. Những gì tôi sợ là sau khi tôi đặt báo thức, nó sẽ bị tắt và người dùng sẽ không biết rằng đó là tắt. – Kemal

Trả lời

49

Khi hủy AlarmManager không sử dụng PendingIntent bằng cờ FLAG_CANCEL_CURRENT. Thay vào đó, hủy bỏ PendingIntent rõ ràng sau khi huỷ báo động:

am = (AlarmManager) getSystemService(getApplicationContext().ALARM_SERVICE); 
Intent i = new Intent(getApplicationContext(),AlarmReceiver.class); 
PendingIntent p = PendingIntent.getBroadcast(getApplicationContext(), 0, i, 0); 
am.cancel(p); 
p.cancel(); 
+1

cảm ơn rất nhiều. p.cancel() đã giúp ở đây! – Karussell

+7

Bạn nên đánh dấu phần này là câu trả lời nếu nó giúp bạn. –

+1

Điều này sẽ nhận được +50 vì không có địa chỉ bài đăng nào khác hủy bỏ 'PendingIntent' cũng như' AlarmManager' và tôi đang sử dụng '(PendingIntent.getBroadcast (getBaseContext(), 0, checkIntent, PendingIntent.FLAG_NO_CREATE)! = null); 'để kiểm tra xem báo thức của tôi có đang chạy hay không và đây là thứ duy nhất hoạt động mà không cần khởi động lại hoạt động của tôi. Lam tôt lăm. –

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