在通讯录中获取名字中包含 “小” 字 的全部人名。
代码如下:
xml文件中只有一个button,所以不再给出,
MainActivity如下:
public class MainActivity extends Activity {
Button search = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_raw_query);
search = (Button) findViewById(R.id.button1);
search.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
SearchContactTool.getInstance().getPhoneContacts("小", MainActivity.this);
}
});
}
}
SearchContactTool类作为查询通讯录的工具类,代码如下:
public class SearchContactTool {
private static SearchContactTool instance = null;
public static SearchContactTool getInstance(){
if (instance == null) {
instance = new SearchContactTool();
}
return instance;
}
/**获取库Phon表字段**/
private static final String[] PHONES_PROJECTION = new String[] {
Phone.DISPLAY_NAME,
Phone.NUMBER,
};
/**联系人显示名称**/
private static final int PHONES_DISPLAY_NAME_INDEX = 0;
/**电话号码**/
private static final int PHONES_NUMBER_INDEX = 1;
/**得到手机通讯录联系人信息**/
public void getPhoneContacts(String name,Context mContext) {
ContentResolver resolver = mContext.getContentResolver();
Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,
PHONES_PROJECTION,
"display_name like ?",
new String[]{"%" + name + "%"},
null);
Log.i("xxx", "cursor = "+phoneCursor.getCount());
if (phoneCursor != null) {
while (phoneCursor.moveToNext()) {
String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
if (TextUtils.isEmpty(phoneNumber)){
continue;
}
String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);
Log.i("xxx", "name = "+contactName+" number= "+phoneNumber);
}
phoneCursor.close();
}
}
}
不要忘了在manifest文件中加入读取手机联系人的权限:
<!-- 读取联系人权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
如果想要用两个字或者多个字进行模糊匹配的方式查找,可以给代码几个关键字,将这段代码:
Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,
PHONES_PROJECTION,
"display_name like ?",
new String[]{"%" + name + "%"},
null);
改为如下代码:
下面的"display_name like? or display_name like?" 作为过滤的条件,其组合可以各式各样,比如: “data1 like ? and sort_key like ?” 问号代表占位符,前面display_name, data1, sort_key 都是通讯录的数据库中表的字段,当然还有其他的字段。在下面的字符串数组中的字符串会去替换之前的问号,逐个替换。有几个问号字符串数组中就应该有几个字符串。
Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,
PHONES_PROJECTION,
"display_name like ? or display_name like ?",
new String[]{"%" + "小" + "%","%" + "伟" + "%"},
null);