Pracuję nad aplikacją, w której pracuję nad kontaktami Android i nie jestem w stanie iść do przodu. W aplikacji potrzebna jest aplikacja, aby zaktualizowany kontakt był wysyłany na serwer lub usunięty kontakt powinien być wysyłany na serwer w celu zsynchronizowania.Android: Otrzymuj tylko zaktualizowany i usunięty kontakt.
Używam usługę kontaktów jako:
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
}
}
Kwestie Jestem stoi przedstawiają się następująco:
A: W powyższym kodzie na uzyskanie niedawno zaktualizowany kontakt i potrzeba aby sprawdzić Version każdego kontaktu z urządzenie z moją przechowywaną bazą danych zapisaną w wersji. Co zajęło dużo czasu dla dużej ilości kontaktów.
B. Uzyskania usunięty kontakt muszę sprawdzić, czy dane dla Raw ID przechowywane w mojej bazy danych jest obecny w urządzeniu lub nie. Jeśli nie, kontakt zostanie usunięty. Sprawdzanie całych kontaktów zajmuje również zbyt dużo czasu.
Ale ten sam kontakt rzeczą odświeżania odbywa się co jest aplikacją w niewielu sekund jak 2 do trzech sekund ...
EDIT: W powyższym kodzie w następujących modułów:
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");
}
Położyłem dziennik. Moduł aktualizacji tak nazywa się wielokrotnie, a także kiedy należy dodawać lub usuwać, że czas też ...
proszę kierować do mnie i sugerują mi, co zrobić, aby zmniejszyć taktowanie dla powyższych zadań ...
Dziękuję za odpowiedź. Ale powyższe odpowiedzi pozwalają mi usunąć kontakt z moim kontem aplikacji. Potrzebuję wszystkich kontaktów, które zostały usunięte lub zaktualizowane. –
Po prostu usuń warunek typu konta z miejsca, gdzie jesteś zainteresowany wszystkimi kontami – RocketRandom
Próbowałem tego również, ale otrzymuję wiele usuniętych i zaktualizowanych numerów. Potrzeba jest tylko najnowszym zaktualizowanym lub usuniętym numerem. –