gpt4 book ai didi

Android:仅获取更新和删除的联系人

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:02:15 25 4
gpt4 key购买 nike

我正在开发一个应用程序,我在其中处理 Android 联系人,但无法继续前进。在应用程序中,应用程序需要将更新的联系人发送到服务器或将删除的联系人发送到服务器进行同步。

我将联系服务用作:

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

我遇到的问题如下:

答:在上面获取最近更新的联系人的代码中,我需要从设备检查每个联系人的版本 与我的联系人的数据库存储版本。大量联系人需要花费大量时间。

B. 要删除联系人,我需要检查设备中是否存在我的数据库中存储的原始 ID数据,或者不是。如果不是,则删除联系人。检查整个联系人也需要太多时间。

但同样的事情在 whats app 中刷新联系人只需几秒,比如 2 到 3 秒......

编辑:在以下模块的上述代码中:

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");
}

我把日志放上去了。所以更新模块被调用了很多次,当我添加或删除那个时候也是...

请指导我并建议我如何减少上述任务的时间...

最佳答案

使用以下查询获取所有已删除和更新的联系人。

public static final String ACCOUNT_TYPE = "com.android.account.youraccounttype"
public static final String WHERE_MODIFIED = "( "+RawContacts.DELETED + "=1 OR "+
RawContacts.DIRTY + "=1 ) AND "+RawContacts.ACCOUNT_TYPE+" = '"+ ACCOUNT_TYPE+"'";

c = contentResolver.query(ContactsContract.RawContacts.CONTENT_URI,
null,
WHERE_MODIFIED,
null,
null);

关于Android:仅获取更新和删除的联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35173856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com