Android ContentResolver 是一个用于查询和操作应用程序数据的接口。以下是一些建议和技巧,可以帮助您更有效地使用 ContentResolver:
使用 Content Resolver 查询数据:
query()
方法查询数据。传入一个 URI、一个投影(表示要返回的列)、一个选择条件(用于过滤结果)和一个可选的排序顺序。Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = {ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.Phone_NUMBERS};
String selection = "((" + ContactsContract.Contacts.DISPLAY_NAME + " LIKE ?) AND (" + ContactsContract.Contacts.Phone_NUMBERS + " LIKE ?))";
String[] selectionArgs = {"%John%", "%123%"};
Cursor cursor = getContentResolver().query(contactsUri, projection, selection, selectionArgs, null);
插入数据:
insert()
方法插入数据。传入一个 URI 和要插入的数据(以 ContentValues 对象的形式)。Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
ContentValues contentValues = new ContentValues();
contentValues.put(ContactsContract.Contacts.DISPLAY_NAME, "John Doe");
contentValues.put(ContactsContract.Contacts.Phone_NUMBERS, "123-456-7890");
Uri newContactUri = getContentResolver().insert(contactsUri, contentValues);
更新数据:
update()
方法更新数据。传入一个 URI、要更新的数据(以 ContentValues 对象的形式)和一个选择条件。Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
String selection = ContactsContract.Contacts._ID + "=?";
String[] selectionArgs = {"1"};
ContentValues contentValues = new ContentValues();
contentValues.put(ContactsContract.Contacts.Phone_NUMBERS, "098-765-4321");
getContentResolver().update(contactsUri, contentValues, selection, selectionArgs);
删除数据:
delete()
方法删除数据。传入一个 URI 和一个选择条件。Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
String selection = ContactsContract.Contacts.DISPLAY_NAME + "=?";
String[] selectionArgs = {"John Doe"};
getContentResolver().delete(contactsUri, selection, selectionArgs);
使用 Content Resolver 监听数据变化:
ContentObserver
接口并重写 onChange()
方法。然后,使用 getContentResolver().registerContentObserver()
方法注册 ContentObserver。Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
getContentResolver().registerContentObserver(contactsUri, true, new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
// 处理联系人添加或删除操作
}
});
使用 Content Resolver 访问其他应用程序的数据:
Uri imagesUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DISPLAY_NAME};
Cursor cursor = getContentResolver().query(imagesUri, projection, null, null, null);
了解这些建议和技巧后,您可以更有效地使用 Android ContentResolver 来查询、插入、更新和删除应用程序数据。