2010-01-28 7 views
8

मैं registerContentObserver() का उपयोग कर रहा हूं क्योंकि संपर्क बदल दिए गए हैं, लेकिन जब मैं uri:People.CONTENT_URI सामग्री के लिए पंजीकरण करता हूं और जब मैं लॉग बिल्ली में देखता हूं संपर्क बदलने के बाद भी "झूठी" के रूप में अधिसूचना प्राप्त करना।एंड्रॉइड: संपर्कों के रूप में अधिसूचित होने के लिए रजिस्टर कॉन्टेंट ऑब्सर्वर() का उपयोग कर

मैंने deliverSelfNotification को भी सत्य पर ओवरराइड किया है। मैं क्या गलत कर रहा हूं?

उत्तर

2

सुनिश्चित नहीं है कि आपका क्या पूछ रहा है, आपका प्रश्न थोड़ा अस्पष्ट है।

यहाँ है कि कैसे मैं एसएमएस सामग्री प्रदाता में परिवर्तन के लिए बाहर सुन, आप इसे उपयोगी

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

ओ.के. मैं और अधिक स्पष्ट होगा: मेरे पास अपना स्वयं का पता पुस्तिका आवेदन है जिसके लिए मैं संपर्क नाम ला रहा हूं और संपर्क संख्या संपर्क सामग्री प्रदाता का उपयोग कर देशी पता पुस्तिका बनाते हैं। तो मेरा प्रश्न है: 1) मैं अपने आवेदन के लिए अधिसूचना कैसे प्राप्त करूं जब किसी विशेष व्यक्ति का संपर्क नाम या संपर्क संख्या मूल पता पुस्तिका 2 में बदल दी गई है) मुझे कैसे पता चलेगा कि मूल में कौन सा क्षेत्र पता पुस्तिका बदल दी गई है। धन्यवाद – warrior

+0

super.onChange (arg0); बहूत ज़रूरी है! – herbertD

+0

मुझे भी @warrior के समान समस्या का सामना करना पड़ रहा है। अगर समाधान मेरे साथ [email protected] – user915267

1

आप कुछ भी एपीआई स्तर 3, से नए लक्षित कर रहे हैं आप ContactsContract.Contacts.CONTENT_URI का उपयोग करना चाहिए मिल सकता है।

और फिर यह केवल एक मामला है: getContentResolver()। रजिस्टरकंटेंट ऑब्सर्वर (संपर्ककंट्रैक्ट। संपर्क। कॉन्टैक्टुरआई, सत्य, सामग्री ऑब्सर्वर);

हालांकि आपको पता नहीं चलेगा कि इस विधि के साथ क्या बदल गया है।

+0

पर साझा किया गया है तो जानें कि 'क्या बदल गया है'? –

संबंधित मुद्दे