2011-02-16 14 views
13

बस यह निर्धारित करने का प्रयास कर रहा है कि रजिस्टरकंटेंट ऑब्सर्वर, या किसी अन्य विधि का उपयोग करते समय कौन सा संपर्क बदलता है, यह निर्धारित करने का एक आसान तरीका है? मैं बता सकता हूं कि डेटाबेस कब बदलता है, लेकिन यह सुनिश्चित नहीं है कि प्रत्येक बार अपडेट/परिवर्तन होने पर मैं सभी रिकॉर्ड देखना चाहता हूं।क्या आप निर्धारित कर सकते हैं कि कौन सा संपर्क w/registerContentObserver बदलता है?

असल में यदि मेरे पास संपर्कों की एक सूची है, और मैन्युअल विधि के माध्यम से अपडेट किया जाता है (यानी मैं संपर्क के लिए फोन नंबर बदलता हूं या एक नया संपर्क जोड़ता हूं), या स्वचालित (सक्रिय सिंक फोटो जोड़ा जाता है, बदल जाता है)। मैं ए में सक्षम होना चाहता हूं) पता है कि कुछ बदल गया है, और बी) पता है कि कुछ डेटा किस संपर्क में बदल गया था।

मैं कुछ ऐसे उपयोगकर्ताओं की तलाश करने की कोशिश कर रहा हूं जहां मैं रिमोट सेवा से अपनी तस्वीरों का मिलान कर सकूं। यदि उपयोगकर्ता खाते में अधिक जानकारी जुड़ जाती है, तो मैं यह देखने के लिए जांच कर पाऊंगा कि यह एक मैच के लिए प्रदान करता है या नहीं। मैं इसे शेड्यूल नहीं करना चाहता हूं, हालांकि, अपडेट होने के बाद मैं इसे करना चाहता हूं।

क्रिस।

+0

क्या आप और स्पष्ट हो सकते हैं? – Taranfx

+0

अपडेटेड प्रश्न – Chrispix

+0

अभी एक अस्थायी काम के रूप में, मैं उन सभी ईमेलों को पार्स कर रहा हूं जिनमें यूआईडी को पकड़ने वाली फ़ोटो शामिल नहीं हैं, और फिर फ़ोटो डाउनलोड कर रही हैं। उम्मीद है कि हालांकि एक बेहतर समाधान है। – Chrispix

उत्तर

7

मुझे यकीन नहीं है कि आप वर्तमान में यूरी के अपडेट के लिए पंजीकरण कर रहे हैं, लेकिन जब आप अपना ContentObserver पंजीकृत करते हैं, तो क्या आप केवल एक व्यक्तिगत उरी को पंजीकृत नहीं कर सकते हैं जो सीधे उस संपर्क में इंगित करता है जिसमें आप रुचि रखते हैं? फिर आपका पर्यवेक्षक केवल तभी सूचित किया जाएगा जब आपका दिलचस्प संपर्क संशोधित हो। एसडीके प्रलेखन शीर्षक में खंड "देखने का URI" इस बारे में अधिक बात करती है:

http://developer.android.com/resources/articles/contacts.html

देखने कुंजी प्रत्येक रिकॉर्ड (पंक्ति) के लिए अद्वितीय है, इसलिए मैं कुछ इस तरह कर रही कल्पना कर सकते हैं कि आप के बाद क्या कर रहे हैं ?

Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey); 
getContentResolver().registerContentObserver(lookupUri, false, myObserver); 

और अपनी सूची में प्रत्येक व्यक्तिगत संपर्क के लिए ऐसा करें।

जोड़ा संपर्क

सबसे अच्छा तरीका है कि मैं यह करने के लिए देख सकते हैं के लिए, संपर्क मेज पर फिर से क्वेरी करने के लिए एक कर्सर हर बार ContentObserver परिवर्तन (फिर से क्वेरी तेजी से है, भले ही आप ' इसे अक्सर बहुत सारे डेटा के साथ कर रहे हैं), और उच्चतम ज्ञात CONTACT_ID मान बनाए रखें। जब भी कर्सर में आपके द्वारा संग्रहीत किए गए आईडी से परे एक आईडी होती है, तो इसे अभी जोड़ा गया था।

इसके अलावा, यदि आपने अभी तक this conversation नहीं देखा है, तो यह एक अच्छा पढ़ा जा सकता है। डियान बहुत अशिष्ट लगता है कि वे ContentObserver

चीयर्स से सामग्री परिवर्तनों के विनिर्देशों को मानते हैं।

+2

तो यह किसी विचार का बहुत बुरा नहीं है, लेकिन यह केवल तभी काम करता है जब मुझे पता चले कि संपर्क क्या जोड़े गए हैं, 3000 सामग्री पर्यवेक्षकों के ओवरहेड के बारे में भी सुनिश्चित नहीं है।मेरे मामले में, मैं एक्सचेंज सक्रिय सिंक के माध्यम से जोड़े गए नए संपर्कों को अपडेट करना चाहता हूं, और यदि वे w/one नहीं जोड़े गए हैं तो w/a photo (देखें और डाउनलोड करें) अपडेट करें। – Chrispix

+0

ठीक है, आपको प्रत्येक पंजीकरण कॉल में पास करने के लिए केवल एक 'ContentObserver' बनाना होगा; यह आपके द्वारा वर्णित "संपर्कों की सूची" के लिए प्रत्येक अद्वितीय 'उरी' के साथ पंजीकृत होगा (सभी संपर्कों का सबसेट माना जाता है)। हालांकि, यह विधि वास्तव में जोड़ने के लिए काम नहीं करती है। – Devunwired

+0

कुछ और विचारों के साथ अद्यतन उत्तर ... – Devunwired

1

के बाद से इस सवाल का जवाब था, वहाँ एक नया कॉलबैक ContentObserver कक्षा में उपलब्ध विधि परिवर्तित सामग्री का यूआरआई है कि है: http://developer.android.com/reference/android/database/ContentObserver.html#onChange(boolean, android.net.Uri)

यह Android एपीआई के साथ शुरू उपलब्ध है स्तर 16

+5

यूरी विशिष्ट रिकॉर्ड नहीं है जो बदला गया था – Mejonzhan

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

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