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 ...

Antworten auf die Frage(2)

Ihre Antwort auf die Frage