如何知道android中更新了哪些特定联系人?
我可以得到一个通用通知“联系人数据库发生了更改”,但我想知道插入、更新或删除的特定记录如何知道android中更新了哪些特定联系人?,android,contacts,addressbook,Android,Contacts,Addressbook,我可以得到一个通用通知“联系人数据库发生了更改”,但我想知道插入、更新或删除的特定记录 我不想使用查找URI概念,因为我不想为每个联系人单独设置查找URI。我想要一个通用的解决方案,我可以知道何时更新或删除任何联系人。您可以实施服务来查看数据库状态 import android.app.Service; import android.content.Intent; import android.database.ContentObserver; import android.database.C
我不想使用查找URI概念,因为我不想为每个联系人单独设置查找URI。我想要一个通用的解决方案,我可以知道何时更新或删除任何联系人。您可以实施
服务来查看数据库状态
import android.app.Service;
import android.content.Intent;
import android.database.ContentObserver;
import android.database.Cursor;
import android.os.Handler;
import android.os.IBinder;
import android.provider.ContactsContract;
public class ContactService extends Service {
private int mContactCount;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mContactCount = getContactCount();
this.getContentResolver().registerContentObserver(
ContactsContract.Contacts.CONTENT_URI, true, mObserver);
}
private int getContactCount() {
Cursor cursor = null;
try {
cursor = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI, null, null, null,
null);
if (cursor != null) {
return cursor.getCount();
} else {
return 0;
}
} catch (Exception ignore) {
} finally {
if (cursor != null) {
cursor.close();
}
}
return 0;
}
private ContentObserver mObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
final int currentCount = getContactCount();
if (currentCount < mContactCount) {
// DELETE HAPPEN.
} else if (currentCount == mContactCount) {
// UPDATE HAPPEN.
} else {
// INSERT HAPPEN.
}
mContactCount = currentCount;
}
};
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
getContentResolver().unregisterContentObserver(mObserver);
}
}
导入android.app.Service;
导入android.content.Intent;
导入android.database.ContentObserver;
导入android.database.Cursor;
导入android.os.Handler;
导入android.os.IBinder;
导入android.provider.contacts合同;
公共类ContactService扩展了服务{
私有int mContactCount;
@凌驾
公共IBinder onBind(意图arg0){
返回null;
}
@凌驾
public void onCreate(){
super.onCreate();
mContactCount=getContactCount();
此.getContentResolver().registerContentObserver(
Contacts contract.Contacts.CONTENT_URI,true,mObserver);
}
私有int getContactCount(){
游标=空;
试一试{
cursor=getContentResolver().query(
Contacts contract.Contacts.CONTENT\u URI,null,null,null,
无效);
如果(光标!=null){
返回cursor.getCount();
}否则{
返回0;
}
}捕获(异常忽略){
}最后{
如果(光标!=null){
cursor.close();
}
}
返回0;
}
私有ContentObserver=newContentObserver(newHandler()){
@凌驾
公共void onChange(布尔自更改){
super.onChange(selfChange);
最终int currentCount=getContactCount();
如果(currentCount
我通过以下方式实现了此问题:
在安装应用程序期间,my local DB的联系人表将由给定时间的联系人初始化。然后所有通话都会被CallListner跟踪:如果用户接听/拨打电话,我会检查该号码是否在用户的当前电话簿中,如果是,我会检索与该号码相关的所有联系信息并更新我的本地数据库。感谢姚昌伟的回复。使用您的代码,我必须知道联系人数据库已更新或删除,但我想确切知道哪个联系人已更新或删除。你知道吗?每个联系人都有自己的版本。你可以自己录制。但是没有API知道哪个联系人被更改了。@ChangweiYao你能详细说明一下如何记录联系人的版本吗?如果(currentCount==mContactCount){//UPDATE account.}每次都会调用它,那么在此基础上,我应该如何知道哪些联系人被更新,所以我应该每次都循环使用联系人