2012-11-28 21 views
5

Tôi mới trong toàn bộ môi trường Android này và tôi thường có một số nghi ngờ rằng có lẽ bạn có thể xem xét kiến ​​thức rất cơ bản và một chút ngu ngốc. Tôi sẽ cố gắng hết sức để giải thích những nghi ngờ tôi có và tại sao tôi có nó để làm cho tôi hiểu.Ngữ cảnh của ứng dụng có luôn giống nhau không kể lớp học?

Tôi đang làm một ứng dụng nơi bạn có thể đặt thông báo nhắc nhở bạn về các lớp học giả mà bạn muốn. Tôi đã thực hiện một lớp mở rộng BroadcastReceiver để nó có thể thiết lập lại tất cả các báo động sau khi thiết bị đã khởi động. Tôi có một cơ sở dữ liệu mà tôi giữ kín thông tin về cảnh báo: lớp, thời gian nó phải được cấu hình, vv Tôi lấy tất cả các báo động và đặt chúng vào các alarmManager theo cách này:

intent = new Intent(ctxt.getApplicationContext(), Notificacion.class); 
intent.putExtra("TAG", tag); 
intent.putExtra("SUBJECT", cursor2.getString(0)); 
intent.putExtra("AULA", cursor2.getString(1));     
displayIntent = PendingIntent.getBroadcast(ctxt, Integer.parseInt(tag), intent, PendingIntent.FLAG_UPDATE_CURRENT);    
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY*7, displayIntent); 

Vâng, tôi đoán điều này sẽ hoạt động tốt cho đến đây. Vấn đề là khi bạn sử dụng các ứng dụng và bạn muốn thiết lập một thông báo, bạn đang làm điều đó từ lớp "Schedule.class" để ý định sẽ có bối cảnh này:

Intent intent = new Intent(getApplicationContext(), Notification.class); 
PendingIntent pend = PendingIntent.getBroadcast(this, Integer.parseInt(tag), intent, PendingIntent.FLAG_UPDATE_CURRENT); 

Trong ứng dụng, bạn có thể xóa một báo thức, và bạn phải gọi alarmManager.cancel (pend) để làm điều đó. Vì vậy, nghi ngờ của tôi là nếu nó sẽ có thể hủy bỏ nó.

Nếu ngữ cảnh khác nhau, nó sẽ không tìm thấy kết quả phù hợp với mục đích đang chờ xử lý, vì nó được đặt từ ngữ cảnh mà tôi có trong phần mở rộng BroadCastReceiver (ctxt) và báo thức được đặt theo ngữ cảnh mà tôi nhận được từ Schedule.class.

Vậy .. ngữ cảnh ứng dụng có giống nhau không? Tôi biết rằng bối cảnh được thiết lập để cung cấp thông tin cho các lớp khác về những gì đang diễn ra, nhưng tôi không chắc liệu bộ lọc Intent sẽ phân biệt nơi ngữ cảnh được đưa ra.

Cảm ơn bạn trước!

Trả lời

2

Nhìn vào các tài liệu AlarmManager cho phương pháp hủy bạn đang sử dụng:

public void cancel (PendingIntent operation)

gia tăng ở mức API 1

Hủy bỏ bất kỳ báo động với một ý định phù hợp. Mọi cảnh báo , thuộc bất kỳ loại nào có Mục đích khớp với số (như được xác định bởi filterEquals(Intent)), sẽ bị hủy.

Vì vậy, các tài liệu Intent.filterEquals nói như sau:

public boolean filterEquals (Intent other)

gia tăng ở mức API 1

Xác định nếu hai ý đồ là như nhau cho các mục đích về ý định độ phân giải (lọc). Tức là, nếu hành động của họ, dữ liệu, loại, lớp và danh mục giống nhau. Điều này không so sánh bất kỳ dữ liệu bổ sung nào được bao gồm trong mục đích.

Tôi không thể nghĩ ra bất kỳ lý do nào về hành động, dữ liệu, loại, lớp hoặc danh mục sẽ khác với Ý định rõ ràng khác (trừ khi rõ ràng là bạn đã thay đổi những thứ đó) .Các bối cảnh dường như không nằm trong tiêu chí cho phù hợp, vì vậy tôi nghĩ bạn có thể khá tự tin rằng nó sẽ bị hủy bỏ bất kể ngữ cảnh nào được sử dụng để tạo ra nó ngay từ đầu.

+0

Đó là những gì tôi nghĩ. Nhưng tôi không chắc chắn liệu ngữ cảnh có nằm trong dữ liệu để nó có thể lọc theo các ý định khác nhau hay không. Dù sao, tôi sẽ cố gắng để làm cho một số thử nghiệm để xem nếu nó hoạt động đúng và tôi sẽ cập nhật ở đây. Cảm ơn! –

+0

Không, biến mData trong lớp Intent là một URI, do đó không phải là một vấn đề. – ajpolt

+0

Okk, tất cả rõ ràng sau đó. Cảm ơn nhiều. Nó hoạt động hoàn toàn tốt = D –

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