में 1 परिवर्तन के बाद दो बार बुलाया गया है मेरे पास एक ऐप है जिसमें मैं एंड्रॉइड संपर्क सूची में दूरस्थ सर्वर पर विवरण भेजने की उम्मीद कर रहा हूं, ताकि उपयोगकर्ता अपने संपर्क ऑनलाइन देख सके। ऐसा करने के लिए मैं संपर्क सूची में फोन पर किए गए किसी भी बदलाव के दूरस्थ सर्वर को सूचित करना चाहता हूं।सामग्री पर्यवेक्षक ऑन चेंज विधि कर्सर
मैंने एक सेवा से 'ContentContract.Contacts.CONTENT_URI' पर एक सामग्री ऑब्सर्वर स्थापित किया है जो फोन बूट होने पर शुरू हो जाता है।
मेरे पास कई प्रश्नोत्तरी हैं, पहला 2 आकस्मिक है, तीसरा मेरी प्रमुख चिंता है।
1: एक बार जब मैंने एक सेवा स्थापित की है जो मेरे कर्सर पर एक ContentObserver पंजीकृत करता है, तो क्या यह पर्यवेक्षक केवल सेवा के भीतर मौजूद है? मेरा मतलब है, अगर सेवा मारे जाती है, तो क्या सामग्री ऑब्सर्वर का पालन करना जारी रखता है?
2: मुझे संदेह है कि उत्तर नहीं है, लेकिन मैं वैसे भी पूछूंगा। क्या यह जानने का कोई तरीका है कि कौन सा संपर्क अपडेट किया जा रहा है मेरी सामग्री ऑब्सर्वर की विनिमय विधि को ट्रिगर कर रहा है? वर्तमान में मुझे फोन पर सभी तह संपर्कों की सूची संकलित करना है और उन्हें अपने रिमोट सर्वर पर भेजना है, यह अपडेट किए जा रहे संपर्कों का विवरण भेजने के लिए इतना आसान होगा।
3: यह मेरा मुख्य प्रश्न है, जब मैं अपनी संपर्क सूची में बदलाव करता हूं तो त्वरित उत्तराधिकार में ऑन चेंज विधि को दो बार निकाल दिया जा रहा है। 1 परिवर्तन, 2 कॉल। क्या इसका प्रबंधन करने के लिए वैसे भी है? मेरी Logcat में 2 त्वरित लाइनों में
public class ContactService extends Service {
JSONArray contactList;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
Log.i("C2DM","content observers initialised");
super.onCreate();
//Call Log Content Provider observer
MyContentContactsObserver contactsObserver = new MyContentContactsObserver();
ContactService.this.getContentResolver().registerContentObserver (ContactsContract.Contacts.CONTENT_URI, true, contactsObserver);
}
private class MyContentContactsObserver extends ContentObserver {
public MyContentContactsObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.i("LOG","detected change in contacts: "+selfChange);
}
}
}
परिणाम:
detected change in contacts: false
detected change in contacts: false
+1, क्या सभी मामलों में 10000ms दूसरा काम विफल रहता है, क्या आपने उपयोगकर्ताओं से इस पर कोई प्रतिक्रिया ली है, धन्यवाद? –
मुझे इसके बारे में उपयोगकर्ताओं से कोई प्रतिक्रिया मिली है। मैं कार्यान्वयन का सबसे अच्छा तरीका नहीं कहूंगा लेकिन यह अब के रूप में अच्छा काम कर रहा है।यह एक तरह का पैच है जिसे हमें लागू करना था। –
मैं 'currentTime = System.CurrentTimeMillis() '' if (nextCallTime
Kobor42