4
我正在使用内容观察员知道有联系人的设备的电话簿发生了变化,但我没有完成确切的任务像wheather联系人已添加删除或更新,更新/添加联系人的价值是什么。在android如何知道该联系人被删除/更新/添加和哪个联系人已新添加
//服务在后台运行,它总是运行和检查,知道的内容已被更改
public class ContactChange extends Service {
ContactObserver observer;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
observer = new ContactObserver(new Handler(),getApplicationContext());
// TODO Auto-generated method stub
getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, false, observer);
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
getContentResolver().unregisterContentObserver(observer);
}
}
//Content observer where we get to know that changes has made to the contact phonebook
public class ContactObserver extends ContentObserver {
private Context mContext;
DataBaseCurdOperation dataBaseCurdOperation;
ApiInterface apiInterface;
MyPrefs myPrefs;
ArrayList<InviteList> inviteArrayList;
public ContactObserver(Handler handler, Context context) {
super(handler);
this.mContext = context;
dataBaseCurdOperation = new DataBaseCurdOperation(mContext);
myPrefs = new MyPrefs(mContext);
apiInterface = ServiceGenerator.createService(ApiInterface.class, Config.BASE_URL_1);
inviteArrayList = new ArrayList<InviteList>();
}
@Override
public void onChange(boolean selfChange) {
this.onChange(selfChange, null);
}
@Override
public void onChange(boolean selfChange, Uri uri) {
Logger.LogError("URI", uri.toString());
boolean hasContactPermission = (ContextCompat.checkSelfPermission(mContext,
android.Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED);
if (hasContactPermission) {
SavingContactsActivity savingContactsActivity = new SavingContactsActivity(mContext);
savingContactsActivity.execute();
new InviteApiCall().execute();
}
}
工作的数据库上使用CON熟悉的观察者,只有在发生任何变化时才会收到通知。它不会给你任何有关更改添加/删除/更新或数据的性质的信息? – umerk44
是的,这是我的问题我们怎么才能知道哪些数据已经改变? – user3475052
您可以将联系人列表的最后修改副本保留在数据库中,并且每当发生更改时,都可以将新联系人列表与最后修改的联系人列表进行比较。不是非常优化的解决方案,但您可以通过这种方式跟踪更改。 – umerk44