2010-01-28 24 views
8

Tôi đang sử dụng registerContentObserver() để được thông báo khi danh bạ được thay đổi, nhưng khi tôi đăng ký nội dung uri:People.CONTENT_URI và khi tôi quan sát trong nhật ký, tôi nhận được thông báo là "sai" ngay cả sau khi thay đổi liên hệ.Android: sử dụng registerContentObserver() để được thông báo khi số liên lạc được thay đổi

Tôi cũng đã ghi đè số deliverSelfNotification thành true. Tôi đang làm gì sai?

Trả lời

2

Không chắc chắn câu hỏi của bạn, câu hỏi của bạn hơi mơ hồ.

Dưới đây là làm thế nào tôi nghe ra cho những thay đổi trong cung cấp nội dung tin nhắn SMS, bạn có thể tìm thấy nó hữu ích

String url = "content://sms/"; 
     Uri uri = Uri.parse(url); 
     getContentResolver().registerContentObserver(uri, true, new MyContentObserver(handler)); 

     /uriSms = Uri.parse("content://sms/inbox"); 
     Cursor c = getContentResolver().query(uriSms, null,null,null,null); 

     //Log.d("COUNT", "Inbox count : " + c.getCount()); 


} 

class MyContentObserver extends ContentObserver { 

    public MyContentObserver(Handler handler) { 

     super(handler); 

    } 

@Override public boolean deliverSelfNotifications() { 
    return false; 
    } 

@Override public void onChange(boolean arg0) { 
    super.onChange(arg0); 

    Log.v("SMS", "Notification on SMS observer"); 

    Message msg = new Message(); 
    msg.obj = "xxxxxxxxxx"; 

    handler.sendMessage(msg); 

    Uri uriSMSURI = Uri.parse("content://sms/"); 
    Cursor cur = getContentResolver().query(uriSMSURI, null, null, 
       null, null); 
    cur.moveToNext(); 
    String protocol = cur.getString(cur.getColumnIndex("protocol")); 
    if(protocol == null){ 
      Log.d("SMS", "SMS SEND"); 
      int threadId = cur.getInt(cur.getColumnIndex("thread_id")); 
      Log.d("SMS", "SMS SEND ID = " + threadId); 
      getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadId), null, null); 

    } 
    else{ 
     Log.d("SMS", "SMS RECIEVE"); 
     int threadIdIn = cur.getInt(cur.getColumnIndex("thread_id")); 
     getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadIdIn), null, null); 
    } 

} 
+0

O.k tôi sẽ rõ ràng hơn: Tôi có ứng dụng sổ địa chỉ của riêng mình mà tôi đang tìm nạp Tên liên hệ và số liên lạc tạo thành sổ địa chỉ gốc bằng cách sử dụng nhà cung cấp nội dung liên hệ. Vì vậy, câu hỏi của tôi là: 1) Làm cách nào để tôi nhận được thông báo cho đơn đăng ký của mình khi Tên liên hệ hoặc Số liên lạc của một người cụ thể được thay đổi trong sổ địa chỉ gốc 2) Làm cách nào để tôi biết trường nào sổ địa chỉ đã được thay đổi. Cảm ơn bạn – warrior

+0

super.onThay đổi (arg0); là rất quan trọng! – herbertD

+0

Tôi cũng phải đối mặt với cùng một vấn đề như @warrior. Nếu giải pháp tìm thấy chia sẻ với tôi tại [email protected] – user915267

1

Nếu bạn đang nhắm mục tiêu bất cứ điều gì mới hơn so với mức api 3, bạn nên sử dụng ContactsContract.Contacts.CONTENT_URI.

và sau đó nó chỉ là vấn đề: getContentResolver(). RegisterContentObserver (ContactsContract.Contacts.CONTENT_URI, true, contentObserver);

Bạn sẽ không biết điều gì đã thay đổi theo phương pháp này.

+0

Làm thế nào để biết 'những gì đã thay đổi'? –

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