2017-07-30 68 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(); 
}