Tôi biết bạn bị cám dỗ để đánh dấu bản sao này nhưng chờ, hãy xem lại lần nữa với các nỗ lực chi tiết (nhưng không thành công) của tôi.Phương thức onChange của Observer bị bắn nhiều lần
Chiến lược 1: Thuật toán:Answer
Lần đầu tiên các onChange là bắn, lấy id của hàng cập nhật
Lần sau các onChange là bắn một lần nữa có được id của hàng được cập nhật
Phù hợp với id
Bỏ qua nếu cùng id Vấn đề
với cách tiếp cận này là nó là dễ bị tổn thương để đua điều kiện. Nếu theo thời gian bạn nhận được id của hàng được cập nhật, onChange đã kích hoạt lần thứ hai, thuật toán này sẽ không thành công. Điều này có nguồn gốc từ kinh nghiệm cá nhân của tôi trong khi thử nghiệm trên máy chậm hoặc máy hoạt động ở công suất tối đa.
Chiến lược 2: Thuật toán:Answer
deliverSelfNotifications Override() để trở thành sự thật.
Điều này có vẻ đầy hứa hẹn lúc đầu nhưng không hoạt động. Code tôi sử dụng để tham khảo:
Trong Hoạt động chính: OnCreate Phương pháp tôi đăng ký:
getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, new CtObserver(new Handler()));
Sau đó, trong một lớp riêng biệt:
package com.example.testproject;
import android.database.ContentObserver;
import android.os.Handler;
import android.util.Log;
/**
* @author Time Traveller
*/
public class CtObserver extends ContentObserver {
public CtObserver(Handler handler) {
super(handler);
}
public boolean deliverSelfNotifications(){
return true;
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.e("onChange","Fired");
}
}
Tại sao bạn nên đóng góp cho câu trả lời này:
Nhà cung cấp nội dung SMS Quering là cách duy nhất cho Ứng dụng không mặc định là chụp sự kiện cho Đã gửi SMS. Nhưng cho đến bây giờ tôi vẫn chưa tìm thấy bất kỳ câu trả lời đầy đủ chức năng thuyết phục nào cho phương pháp này. Vì vậy, chúng tôi thực sự cần phải có một số suy nghĩ về điều này !!
Câu hỏi:
- các chức năng (không tinh chỉnh) cách đơn giản là khi biết rằng một tin nhắn SMS được viết để các nhà cung cấp nội dung chỉ một lần là bao nhiêu?
- Cách chính xác khi sử dụng deliverSelfNotifications() trong Lớp quan sát nội dung là gì?
Bạn không cần trả lời tất cả câu hỏi, chỉ cần cho chúng tôi biết bất kỳ điều gì bạn biết.