Android: Nur aktualisierte und gelöschte Kontakte erhalten
Ich entwickle gerade eine Anwendung, in der ich an Android-Kontakten arbeite und nicht in der Lage bin, voranzukommen. In der App muss der Kontakt, der aktualisiert wird, an den Server gesendet werden, oder der Kontakt, der gelöscht wird, muss zur Synchronisierung an den Server gesendet werden.
Ich benutze den Kontaktservice als:
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
}
}
Die Probleme, mit denen ich konfrontiert bin, sind wie folgt:
EIN Im obigen Code zum Abrufen des kürzlich aktualisiert contact Ich muss das @ überprüfAusführun von jedem Kontakt vonGerä Mit meinem Datenbank gespeicherte Version von Kontakten. Was für viele Kontakte viel Zeit in Anspruch nahm.
B. Um einen gelöschten Kontakt zu erhalten, muss ich überprüfen, ob dasDate für dasRaw ID in meiner Datenbank gespeichert ist im Gerät vorhanden oder nicht. Wenn nicht, wird der Kontakt gelöscht. Das Überprüfen ganzer Kontakte dauert zu lange.
Aber die gleiche Sache, Kontaktaktualisierung erfolgt in Whats App in nur wenigen Sekunden wie 2 bis drei Sekunden ...
EDIT: Im obigen Code in folgendem Modul:
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");
}
Ich habe das Protokoll erstellt. Das Update-Modul wird also oft aufgerufen, und auch, wenn ich diese Zeit auch hinzufüge oder lösche ...
Bitte leite mich und schlage mir vor, was ich tun soll, um das Timing für die oben genannten Aufgaben zu reduzieren ...