使用部分搜索字符串搜索联系人
Search a contact with partial search string
我想搜索 android 用户的联系人列表,只需键入特定号码的 3-4 位数字即可。我已经编写了以下方法来执行相同的操作,但这仅在我写入完整的 10 位数字且不少于此时才有效。这意味着它只适用于精确匹配。
例如,我想要从 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();
}
请帮我找出错误。
啊终于。一件事拯救了我的一天:
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();
}
我想搜索 android 用户的联系人列表,只需键入特定号码的 3-4 位数字即可。我已经编写了以下方法来执行相同的操作,但这仅在我写入完整的 10 位数字且不少于此时才有效。这意味着它只适用于精确匹配。 例如,我想要从 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();
}
请帮我找出错误。
啊终于。一件事拯救了我的一天:
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();
}