配置文件查询返回0行

时间:2015-03-02 01:49:40

标签: android profile

我正在使用ContactsContract.Profile.CONTENT_URI尝试获取用户的个人资料信息。它运行但返回零行。

我怀疑这是一个权限问题,其中我为我的应用设置的权限未被提供商看到。我有(以及其他权限):

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />

我已尝试删除这两个权限,但我没有收到任何错误(或任何返回的行)。我也试过拼错第二个。同样的事情。

以下是执行查询的代码:

  private void fetchProfile ()
  {
    logD ("EA profiles:");  // wrapper on Log.d()
    ContentResolver cr = getContentResolver();
    Uri uri = Uri.withAppendedPath (ContactsContract.Profile.CONTENT_URI,
                                    ContactsContract.Contacts.Data.CONTENT_DIRECTORY);

    final String[] projection = 
    {
      ContactsContract.Contacts._ID,                       // 0
      ContactsContract.CommonDataKinds.Email.DISPLAY_NAME, // 1
      ContactsContract.CommonDataKinds.Email.ADDRESS,      // 2
      ContactsContract.CommonDataKinds.Email.IS_PRIMARY,   // 3
    };

    String where = ContactsContract.Contacts.Data.MIMETYPE + "= ?";
    final String args[] = {
      ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE,
    };
    String order = ContactsContract.Contacts.Data.IS_PRIMARY + " DESC";

    Cursor cursor = cr.query (uri, projection, where, args, order);
    while (cursor.moveToNext())
    {
      long id = cursor.getLong(0);
      String name = cursor.getString(1);
      String addr = cursor.getString(2);
      int isPrimary = cursor.getInt(3);
      logD ("  id " + id + ", name " + name + ", addr " + addr + ", isP " + isPrimary);
    }
    cursor.close();
  }

我在三种不同的Android设备上试过这个。相同的行为。有任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

按照Accessing Contacts Data / Retrieve Contact Details

中的说明尝试使用Uri

而不是:

    Uri uri = Uri.withAppendedPath (
       ContactsContract.Profile.CONTENT_URI,
       ContactsContract.Contacts.Data.CONTENT_DIRECTORY);
    // uri == content://com.android.contacts/profile/data

使用:

    Uri uri = ContactsContract.Data.CONTENT_URI;
    // uri == content://com.android.contacts/data