ContentObserver debe llamar si y sólo si ContactsContract.Contacts.CONTENT_URI cambia
Como mi aplicación utiliza contenido de android.provider.ContactsContract.Data
(API> 11) y ContactsContract.Contacts.CONTENT_URI
(API <11) para rellenar Contacts
.
He intentado registerContentObserver()
contra este proveedor. Pero llama a mi ContentObserver
incluso si trato de llamar a una persona desde el dispositivo tan pronto como pongo la llamada. Se ContentObserver
mi ContentObserver
que no es útil para mí, ya que no hay ningún cambio de contenido en el Contacts Provider
.
- Contactos ContentObserver llamado aleatoriamente
- ¿Puedes determinar qué cambios de contacto tienen con registerContentObserver?
- El método onChange de Content Observer se disparó varias veces
- Android - Observer DB cambia con GreenDao ORM
- Android evento onChange no se activa en contentObserver para la historia de cromo en android 5 (Lollypop)
Causa principal:
Parece como LAST_TIME_CONTACTED
o algo en ContactsContract.Contacts.CONTENT_URI
hacer cambios cuando se ha hecho una llamada desde el dispositivo que legítima se activa por ContentObserver
.
Intentó:
private class ContactsContentObserver extends ContentObserver { public ContactsContentObserver() { super(null); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); Zname.getPreferences().setRefreshContact(true); } }
Registered ContentObserver
en OnCreate()
de Activity
ContactsContentObserver contactsContentObserver = new ContactsContentObserver(); getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, false, contactsContentObserver);
Intentado con notifyForDescendents
como false
en registerContentObserver
. Aún así, desencadena ContentObserver
Ques
¿Cómo se puede registrar un ContentObserver
que se activa si y sólo si la información de los contactos está bajo CRUD (Create, Update, Delete) excepto Last_Time_Contacted
o sus descendientes?
- Android: ¿Cómo registrar un observador de contenido sin actividad?
- Cómo escuchar el contacto insertado / actualizado / eliminado en la libreta de direcciones
- Android: observador de contenido para contenido: // sms / enviado no funciona
- Aplicación de copia de seguridad y sincronización de contactos
- ContentObserver onChange
- Sms ContentObserver onChange () se activa varias veces
- ContentObserver no funciona en android
- Cómo implementar un ContentObserver en un fragmento utilizando CursorAdapter y LoaderCallbacks?
El problema fundamental aquí es que registrarse en ContactsContract.Contacts.CONTENT_URI
no está funcionando como usted podría razonablemente pensar.
La razón por la que obtiene actualizaciones incluso si notifyForDescendents
es false
es porque el Uri
desencadena la actualización es … ContactsContract.Contacts.CONTENT_URI
y no la fila de contactos que se está marcando.
El código ofensivo en la aplicación de Contactos se puede encontrar en GrepCode y hay un error presentado para esto en Google Code .
Así que para responder a su pregunta, no puede registrar un ContentObserver
que activará para campos específicos de un contacto. Usted tendría que tener algo en su aplicación que se mantendrá al tanto de calcular las diferencias cuando se onChange
incendios.
Como proveedor de contenido de android.provider.ContactsContract
tiene su propia complejidad que hace que ContentObserver
sea difícil de notificar sólo en el cambio de contenido de contacts
, excepto que es el campo LAST_TIME_CONTACTED
ya que todos los compañeros se LAST_TIME_CONTACTED
ellos y así es.
Es necesario desarrollar su propia lógica si los datos de los contacts
se actualizan o no cuando se notifica a ContentObserver
.
Puntos a considerar la construcción de la lógica si los contacts
realmente se actualiza o no.
- Comprobación sobre estas bases de la última vez marcada. Depende del requisito.
- Añadir
ContentObserver
en elService
que esSTICKY
para que pueda estar allí cuando los contactos obtener cambio.
Sync Phone Book Logic: – Como he mantenido los contactos utilizando SQLite, por lo que comprobar si existe o no y wrt la construcción de la lógica.
ContentValues values; Cursor cursor = Zname.getApplication().getContentResolver().query(DBConstant.All_Contacts_Columns.CONTENT_URI,null,DBConstant.All_Contacts_Columns.COLUMN_CONTACT_NUMBER+ "=?",new String[] { _contact.getContactNumber() },null); if (cursor.getCount() <= 0) { cursor.moveToFirst(); Zname.getApplication().getContentResolver().delete(DBConstant.All_Contacts_Columns.CONTENT_URI,DBConstant.All_Contacts_Columns.COLUMN_CONTACT_NUMBER+ "?=",new String[] { _contact.getContactNumber() }); Log.i(TAG, "Updating zname phonebook"); values = new ContentValues(); values.put(DBConstant.All_Contacts_Columns.COLUMN_CONTACT_ID,_contact.getContactId()); values.put(DBConstant.All_Contacts_Columns.COLUMN_CONTACT_NUMBER,_contact.getContactNumber()); values.put(DBConstant.All_Contacts_Columns.COLUMN_DISPLAY_NAME,_contact.getContactName()); values.put(DBConstant.All_Contacts_Columns.COLUMN_ZNAME_DP_URL_SMALL,_contact.getContactPhotoUri().toString()); Zname.getApplication().getContentResolver().insert(DBConstant.All_Contacts_Columns.CONTENT_URI,values); if (cursor != null) cursor.close(); }
- Registro en procesado en google play en android?
- AdView y FloatingActionButton se superponen mientras se utiliza CoordinatorLayout