【发布时间】:2018-12-24 08:09:53
【问题描述】:
我正在创建一个 android 应用程序,在我的应用程序中有一个处理联系人同步的模块,我在其中同步来自用户联系人的联系人。
带有服务器联系人列表的列表,用于过滤在应用中注册的用户,类似于 Whatsapp、电报、Facebook。
现在我的主要问题是如何执行联系人同步,目前我正在使用一个同步适配器,我从用户联系人列表中获取所有联系人并将其发送到服务器以执行同步 但是这种方法很慢和公用事业大量的电话资源,
所以我选择了一种更好的方法,如果您知道任何帮助,请参考我。
话虽如此,我遇到了内容观察器,它在某种程度上工作得更好。它会在添加或编辑联系人时通知我,但在删除联系人时无法正确通知,我正在使用
ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP,
其次,它只通知应用程序何时运行而不是何时被终止,如何在后台运行它,以及如果可能的话,我如何将它集成到同步适配器中以定期检查或是否有同步适配器表示执行此联系人同步。任何有助于找到同步联系人的适当方法的帮助将不胜感激
这是我的代码
public class ContentObserver extends android.database.ContentObserver
{
private Context mContext;
private static final String TAG="Contenr_observer_tag";
public ContentObserver(Handler handler,Context context) {
super(handler);
this.mContext=context;
Log.d(TAG,"occures here");
}
@Override
public void onChange(boolean selfChange) {
this.onChange(selfChange);
}
@Override
public void onChange(boolean selfChange, Uri uri) {
Cursor cursor=mContext.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null,null,
null,ContactsContract.Contacts.CONTACT_LAST_UPDATED_TIMESTAMP+" DESC");
if (cursor.moveToNext()){
String id=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Log.d(TAG,"contact id: "+id);
Log.d(TAG,"contact name "+name);
}
cursor.close();
}
}
【问题讨论】:
-
您是如何尝试以前的方法或查看所有没有内容观察者的联系人的?如果您运行正确的查询,您可以快速完成此操作。另外,您是否正在检查用户是否仅使用电话号码(如在 whatsapp 中)注册到您的应用程序?
-
请发送当前查询使用的内容观察者查询是:Cursor cursor=cR.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,null);是的,我正在检查用户是否像 whatsapp 一样注册
标签: java android android-contacts contactscontract