从android中的联系人获取联系人姓名

时间:2011-11-08 15:37:30

标签: android contacts

我在从联系人处获取联系人姓名时遇到问题。我正在制作短信应用程序,如您所知,当您收到短信时,您收到的号码会附带国家/地区代码,但如果您使用国家代码保存在内存中的相同号码,您会如何找到它?

我可以使用国家/地区代码保存该号码,但如果没有国家/地区代码则保存该号码。

这是我的代码:

String[] projection = new String[] {
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
            ContactsContract.CommonDataKinds.Phone.NUMBER };

    // encode the phone number and build the filter URI
    Uri contactUri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(number));

    // query time
    Cursor c = getContentResolver().query(contactUri, projection, null,
            null, null);

    // if the query returns 1 or more results
    // return the first result
    if (c.moveToFirst()) {
        String name = c.getString(c
                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        return name;
    }

    // return the original number if no match was found
    return number;

1 个答案:

答案 0 :(得分:0)

您应该尝试在选择中使用SQLite LIKE。我没有测试过这个,但你会明白这个想法。该方法接受来自SMS的号码(地址)并尝试将其映射到来自Phone.NUMBER的号码。

  private void whateverYouCallMe(String numberWithCode) {

  String[] projection = new String[] {
        ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
        ContactsContract.CommonDataKinds.Phone.NUMBER };

  String selection = Phone.NUMBER + " LIKE '%?%'" // numberWithCode should supplement the ? 
  final String[] SELECTION_ARGS = { numberWithCode };

  Cursor c = getContentResolver().query(contactUri, projection, selection, SELECTION_ARGS, null);

  //etc
  }