在我们的每日短信程序中,有一个这样的功能,就是点击‘选择联系人’按钮,会出现联系人选择界面,点击选择联系人后,会将这个联系人的手机号码加入一个文本框中。
关于选择联系人,可以直接使用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"/>。
分享到:
相关推荐
这段代码会启动系统的联系人选择器,当用户选择一个联系人后,系统会返回选中的联系人的URI。 **二、选择联系人** 选择联系人通常与上一步调用系统通讯录紧密相连。在`onActivityResult()`方法中,我们可以获取到...
Android ViewPager+RadioGroup+Fragment超高仿微信底部滑动菜单AndroidStudio源码 Blog:http://blog.csdn.net/shenyuanqing/article/details/46670761
在Android系统中,联系人应用是用户日常交互的重要部分,其功能包括添加、编辑和查找联系人等。本文将深入探讨如何实现一个全特效的联系人应用,特别是字母表快速滚动的功能,使得用户能快速定位到特定联系人的名字...
获取SIM卡联系人的方式与获取手机联系人类似,只是URI不同,例如,获取SIM卡联系人的URI是`ContactsContract.CommonDataKinds.Sim.CONTENT_URI`。 三、最近联系人 最近联系人是指用户最近通话或通信的联系人列表。...
- **API Level 5**:对应Android 2.0(Eclair),改进了联系人管理、浏览器等。 - **API Level 6**:对应Android 2.0.1(Eclair),小幅度改进。 - **API Level 7**:对应Android 2.1(Eclair MR1),加入了动态壁纸...
在Android开发中,有时我们需要实现一个功能,即查询手机用户输入的号码的归属地信息。这个功能在诸如电话簿管理、防骚扰应用等场景中非常常见。本项目提供了一个基于本地数据库的Android手机号码归属地查询Demo,让...
这个系统允许用户通过他们的Android手机执行一系列在PC上的操作,增强了移动设备的实用性。 首先,让我们深入了解Android客户端部分。Android是一个开源的操作系统,广泛应用于智能手机和平板电脑。开发Android应用...
在Android开发中,实现联系人字母排序,尤其是仿微信的字母栏导航功能,是一个常见的需求。这个DEMO项目就是专门针对这一功能进行演示的。在本文中,我们将深入探讨如何在Android应用中实现类似微信的联系人字母排序...
在Android开发中,"android studio拍照+选择图片"是一个常见的需求,主要涉及到用户交互和多媒体处理方面的技术。本文将深入探讨如何在Android Studio项目中实现这两个功能,包括使用相机拍照和从图库选择图片。 ...
首先,Android是Google开发的开源移动操作系统,用于智能手机和平板电脑。开发者可以使用Java或Kotlin语言来编写Android应用。在这个场景中,Android客户端负责用户界面交互,发送HTTP请求到服务端,接收并处理响应...
适配器中的`getItem(int position)`方法返回对应位置的Fragment,而`getPageTitle(int position)`方法则返回该位置Tab的标题文本。 为了将TabLayout与ViewPager连接起来,调用TabLayout的`setupWithViewPager...
这种功能可以提高用户体验,让用户能够迅速定位并选择所需项。本教程将深入探讨如何在Android应用中实现这样一个改进版的快速滑动列表。 首先,我们需要理解`ListView`的基本用法。`ListView`是Android系统提供的一...
这个“Android+OpenCV+人脸识别源码(完整)”项目,正是一个整合了Android与OpenCV的示例,用于在Android设备上实时检测和识别人脸。 首先,OpenCV(开源计算机视觉库)是这个项目的核心组件。它是一个跨平台的库...
Android SDK是开发Android应用程序的关键工具集,它包含了各种库、工具和API文档,使得开发者能够构建、测试和调试他们的应用。在本例中,我们关注的是SDK的两个特定版本:Android 7.0 (Nougat) 和 Android 8.0 ...
在Android开发中,有时我们需要为用户提供一个功能,允许他们选择国家并自动匹配相应的区号,以便于电话号码的输入或国际通话。这个“android 中文版 选择国家对应区号发生变化Demo”就是一个针对这一需求的示例应用...
选择不同国家地区,获取得到不同国家地区的电话号码的区号代码,比如选择china, 得到+86
在Android开发中,有时我们需要实现一个功能,即查询手机号码的归属地信息。"Android手机号码归属地查询源码"就是一个实现此功能的项目,它包括了处理手机号码文本、数据库以及Android应用程序的源代码。这个项目...
在本项目中,我们主要涉及三个核心技术:Android、Servlet和MySQL。这三者结合,构建了一个简单的移动应用数据交互系统,使得Android客户端可以与后台服务器进行数据通信,并通过MySQL数据库存储和检索信息。 首先...
这个功能让用户能够迅速定位并选择所需的联系人,通过滑动右侧的字母栏,列表会自动滚动到对应首字母的联系人。下面我们将详细探讨如何构建这样一个功能。 首先,我们需要一个ListView或RecyclerView作为列表的基础...
"Android地名选择器 全国省市区选择器 城市选择 区县选择"是一个针对这种需求的专业组件,它允许用户在应用程序内方便地挑选中国境内的省份、城市以及区县。这个组件通常包含一个层次化的列表视图,用户可以逐级下拉...