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 和一个选择条件。 - 示例:删除名为 “John Doe” 的联系人。
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 访问其他应用程序的数据:
- 要访问其他应用程序的数据,您需要知道它们的 Content URI。通常,这些 URI 可以在应用程序的文档或官方资源中找到。
- 示例:访问某个应用程序提供的图片库。
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 来查询、插入、更新和删除应用程序数据。