Sto sviluppando un'applicazione in cui sto lavorando su Contatti Android e non posso andare avanti. In app la necessità dell'applicazione è che il contatto che viene aggiornato deve essere inviato al server o il contatto che viene eliminato deve essere inviato al server per la sincronizzazione.Android: ricevi solo contatti aggiornati e cancellati
Sto usando il servizio di contatto come:
public class ContactService extends Service {
private int mContactCount;
Cursor cursor = null;
static ContentResolver mContentResolver = null;
// Content provider authority
public static final String AUTHORITY = "com.android.contacts";
// Account typek
public static final String ACCOUNT_TYPE = "com.example.myapp.account";
// Account
public static final String ACCOUNT = "myApp";
// Instance fields
Account mAccount;
Bundle settingsBundle;
@Override
public void onCreate() {
super.onCreate();
// Get contact count at start of service
mContactCount = getContactCount();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Get contact count at start of service
this.getContentResolver().registerContentObserver(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, true, mObserver);
return Service.START_STICKY;
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
private int getContactCount() {
try {
cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
if (cursor != null) {
return cursor.getCount();
} else {
cursor.close();
return 0;
}
} catch (Exception ignore) {
} finally {
cursor.close();
}
return 0;
}
private ContentObserver mObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
this.onChange(selfChange, null);
}
@Override
public void onChange(boolean selfChange, Uri uri) {
new changeInContact().execute();
}
};
public class changeInContact extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... arg0) {
ArrayList<Integer> arrayListContactID = new ArrayList<Integer>();
int currentCount = getContactCount();
if (currentCount > mContactCount) {
// Contact Added
} else if (currentCount < mContactCount) {
// Delete Contact
} else if (currentCount == mContactCount) {
// Update Contact
}
mContactCount = currentCount;
return "";
}
@Override
protected void onPostExecute(String result) {
contactService = false;
} // End of post
}
}
I problemi che sto affrontando sono i seguenti:
A: Nel codice qui sopra per ottenere il contatto recentemente aggiornato ho bisogno per controllare la versione di ogni contatto da dispositivo con la mia versione memorizzata nel database dei contatti. Il che ha richiesto molto tempo per una grande quantità di contatti.
B. Per ottenere contatto eliminato ho bisogno di verificare che i dati per la id Raw memorizzati nel mio database è presente nel dispositivo o meno. In caso contrario, il contatto viene eliminato. Ci vuole anche troppo tempo per controllare tutti i contatti.
Ma la stessa cosa di aggiornamento contatto è fatto in che cosa è app in pochi secondi come 2 o tre secondi ...
EDIT: Nel codice sopra nella seguente modulo:
if (currentCount > mContactCount) {
// Contact Added
Log.d("In","Add");
} else if (currentCount < mContactCount) {
// Delete Contact
Log.d("In","Delete");
} else if (currentCount == mContactCount) {
// Update Contact
Log.d("In","Update");
}
Ho messo il registro. Così il modulo di aggiornamento è chiamato molte volte, e anche quando faccio aggiungere o eliminare quel tempo troppo ...
per favore mi guida e mi suggerisce cosa fare per ridurre i tempi per i compiti di cui sopra ...
Grazie per la risposta. Ma sopra le risposte mi dà il mio account account contatti cancellati o aggiornati. Ho bisogno di tutti i contatti che vengono cancellati o aggiornati. –
Basta rimuovere la condizione del tipo di account dal dove se sei interessato a tutti gli account – RocketRandom
Ho provato anche quello, ma ricevendo molti numeri cancellati e aggiornati. La necessità è solo l'ultimo numero aggiornato o cancellato. –