在我们的每日短信程序中,有一个这样的功能,就是点击‘选择联系人’按钮,会出现联系人选择界面,点击选择联系人后,会将这个联系人的手机号码加入一个文本框中。
关于选择联系人,可以直接使用Android的内置联系人实现,网上也有些例子,但是有些代码有点问题,有的在模拟器正常,手机上不行,有的手机OK,模拟器不行。原因是在联系人URI使用了硬编码,你可以使用ContactsContract.Contacts.CONTENT_URI常量来增强移植性。
选择联系人部分代码如下:
Java代码
mChooseContactButton.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
SMSSendActivity.this.startActivityForResult(intent, 1);
}
});
接下来就是获取选择联系人的手机号码,首先需要通过函数onActivityResult获取选择的联系人,然后通过Content Provider查询联系人的手机号码,代码片段如下:
Java代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode)
{
case (1) :
{
if (resultCode == Activity.RESULT_OK)
{
Uri contactData = data.getData();
Cursor c = managedQuery(contactData, null, null, null, null);
c.moveToFirst();
String phoneNum=this.getContactPhone(c);
mPhoneNum.setText(phoneNum); //mPhoneNum为接收的EditText或TextView
}
break;
}
}
}
//获取联系人电话
private String getContactPhone(Cursor cursor)
{
int phoneColumn = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
int phoneNum = cursor.getInt(phoneColumn);
String phoneResult="";
//System.out.print(phoneNum);
if (phoneNum > 0)
{
// 获得联系人的ID号
int idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID);
String contactId = cursor.getString(idColumn);
// 获得联系人的电话号码的cursor;
Cursor phones = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ " = " + contactId,
null, null);
//int phoneCount = phones.getCount();
//allPhoneNum = new ArrayList<String>(phoneCount);
if (phones.moveToFirst())
{
// 遍历所有的电话号码
for (;!phones.isAfterLast();phones.moveToNext())
{
int index = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
int typeindex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);
int phone_type = phones.getInt(typeindex);
String phoneNumber = phones.getString(index);
// 获取联系人姓名代码改为: String phoneName=phones.getString(phones.getColumnIndex(PhoneLookup.DISPLAY_NAME));
switch(phone_type)
{
case 2:
phoneResult=phoneNumber;
break;
}
//allPhoneNum.add(phoneNumber);
}
if (!phones.isClosed())
{
phones.close();
}
}
}
return phoneResult;
}
这样,就可以实现通过选择联系人来获取它的手机号码了。
注意:最后要在AndroidManifest中配置读取联系人的权限,<uses-permission android:name="android.permission.READ_CONTACTS"/>。
分享到:
相关推荐
Android ViewPager+RadioGroup+Fragment超高仿微信底部滑动菜单AndroidStudio源码 Blog:http://blog.csdn.net/shenyuanqing/article/details/46670761
1.Android调用系统通讯录 2.选择联系人 3.拨打电话 4.添加 查询联系人
用Qt【服务器端】+Android【客户端】实现手机远程控制PC,内含服务器和客户端的所有代码。
主要为大家详细介绍了Android获取手机联系人电话号码并返回结果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
包含本地数据库的android手机号码归属地查询Demo。 用ViewPager+Fragment来实现的。 包含有封装类,用于读取android中assets目录中的数据库文件。
【Android】Android 监听网络状态+源代码
基于Android 平台的手机联系人管理软件源码。包含整个项目,直接导入Eclipse开发环境可以运行。 注: 用android-3
Android Tab(TabLayout+Fragment)实现源码
Android 滑动效果 Gallery + GridView
Android SDK NDK API 对应关系
android 联系人 SIM卡 最近联系人 通讯录 获取源代码
此为示例代码,详细讲解请参考 http://blog.csdn.net/sinyu890807/article/details/9050671
Android+OpenCV+人脸识别源码(完整)Android系统调用opencv实现人体识别。可以实现多个人脸的识别
http://blog.csdn.net/l515518205/article/details/26612187解说
Android 顶部可以伸缩+头部固定+listview下拉刷新、上拉请求更多
android Listview分批加载+自动加载 非常不错的demo
Android smack4.1.4的示例,包括连接,登录,获取好友列表,发送消息等示例
Android Studio使用ViewPager+Fragment实现仿微信滑动切换界面
电脑需要 jre 环境支持,如果没有请先搜索下载安装 远程控制电脑操作步骤: 1. 运行附件中的 RemoteControlServer.exe,控制台会出现: Listening... ...快速单击手机屏幕电脑也会对应单击鼠标左键...,谢谢支持
android快速滑动列表+首字母提示(仿通讯录,iphone)