2017-07-30 125 views
0

我想通过输入特定号码的3-4位数字来搜索android用户的联系人列表。我已经写了下面的方法来做同样的事情,但是这只有在我编写了完整的10位数字并且不低于这个数字时才起作用。这意味着它只能用于完全匹配。 e.g我要开始98965的数量...等等..但我只给我的对手,当我键入完整9896511112用部分搜索字符串搜索联系人

public static void getContactDetails(Context context, String number, int type) { 
     String[] projection = new String[]{ 
       ContactsContract.PhoneLookup.DISPLAY_NAME, 
       ContactsContract.PhoneLookup._ID, 
       ContactsContract.PhoneLookup.LOOKUP_KEY, 
       ContactsContract.PhoneLookup.PHOTO_URI, 
       ContactsContract.PhoneLookup.NUMBER}; 
     Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number.trim() + "%")); 

     Cursor cursor = context.getContentResolver().query(contactUri, null, null, null, null); 

     while (Common.nonNull(cursor) && cursor.moveToNext()) { 
      String lookUpKey = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.LOOKUP_KEY)); 
      String mobileNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.NUMBER)); 
      Log.e("I am found", "Found " + number); 
     } 
     cursor.close(); 
    } 

请帮我找到我的错误。

回答

0

啊,最后。有一两件事,救了我的一天:

Uri uri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(partial)); 

使用“ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI” 的代替ContactsContract.PhoneLookup.CONTENT_FILTER_URI,它会为你工作。

这是我下面完整的例子:

public static void getContactDetails(Context context, String number, int type) { 
    String[] projection = new String[]{ 
      ContactsContract.PhoneLookup.DISPLAY_NAME, 
      ContactsContract.PhoneLookup._ID, 
      ContactsContract.PhoneLookup.LOOKUP_KEY, 
      ContactsContract.PhoneLookup.PHOTO_URI, 
      ContactsContract.CommonDataKinds.Phone.NUMBER}; 
    Uri contactUri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(number.trim())); 

    Cursor cursor = context.getContentResolver().query(contactUri, projection, null, null, null); 

    while (Common.nonNull(cursor) && cursor.moveToNext()) { 
     String lookUpKey = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.LOOKUP_KEY)); 
     String mobileNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
     String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)); 

     if (mobileNumber.length() > 10) { 
      mobileNumber = mobileNumber.substring(mobileNumber.length() - 10); 
      if (mobileNumber.startsWith(number)) { 
       Log.e("I am found", "I am found " + mobileNumber + displayName); 
      } 
     } 

    } 

    cursor.close(); 
}