温馨提示×

android contentresolver有啥使用技巧

小樊
81
2024-11-22 23:29:09
栏目: 编程语言

Android ContentResolver 是一个用于查询和操作应用程序数据的接口。以下是一些建议和技巧,可以帮助您更有效地使用 ContentResolver:

  1. 使用 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);
      
  2. 插入数据:

    • 使用 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);
      
  3. 更新数据:

    • 使用 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);
      
  4. 删除数据:

    • 使用 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);
      
  5. 使用 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);
              // 处理联系人添加或删除操作
          }
      });
      
  6. 使用 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 来查询、插入、更新和删除应用程序数据。

0