`
zhaiyuehui
  • 浏览: 11674 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Android选择联系人+返回对应手机号码(转载)

阅读更多
在我们的每日短信程序中,有一个这样的功能,就是点击‘选择联系人’按钮,会出现联系人选择界面,点击选择联系人后,会将这个联系人的手机号码加入一个文本框中。

   关于选择联系人,可以直接使用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调用系统通讯录,选择联系人,拨打电话

    这段代码会启动系统的联系人选择器,当用户选择一个联系人后,系统会返回选中的联系人的URI。 **二、选择联系人** 选择联系人通常与上一步调用系统通讯录紧密相连。在`onActivityResult()`方法中,我们可以获取到...

    Android ViewPager+RadioGroup+Fragment超高仿微信底部滑动菜单AndroidStudio源码

    Android ViewPager+RadioGroup+Fragment超高仿微信底部滑动菜单AndroidStudio源码 Blog:http://blog.csdn.net/shenyuanqing/article/details/46670761

    Android系统联系人全特效实现,字母表快速滚动

    在Android系统中,联系人应用是用户日常交互的重要部分,其功能包括添加、编辑和查找联系人等。本文将深入探讨如何实现一个全特效的联系人应用,特别是字母表快速滚动的功能,使得用户能快速定位到特定联系人的名字...

    android 联系人 SIM卡 最近联系人 通讯录 获取源代码

    获取SIM卡联系人的方式与获取手机联系人类似,只是URI不同,例如,获取SIM卡联系人的URI是`ContactsContract.CommonDataKinds.Sim.CONTENT_URI`。 三、最近联系人 最近联系人是指用户最近通话或通信的联系人列表。...

    Android SDK NDK API 对应关系

    - **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开发中,有时我们需要实现一个功能,即查询手机用户输入的号码的归属地信息。这个功能在诸如电话簿管理、防骚扰应用等场景中非常常见。本项目提供了一个基于本地数据库的Android手机号码归属地查询Demo,让...

    Android实现远程控制PC(Android[客户端]+Qt[服务器端])

    这个系统允许用户通过他们的Android手机执行一系列在PC上的操作,增强了移动设备的实用性。 首先,让我们深入了解Android客户端部分。Android是一个开源的操作系统,广泛应用于智能手机和平板电脑。开发Android应用...

    Android 联系人字母排序(仿微信)

    在Android开发中,实现联系人字母排序,尤其是仿微信的字母栏导航功能,是一个常见的需求。这个DEMO项目就是专门针对这一功能进行演示的。在本文中,我们将深入探讨如何在Android应用中实现类似微信的联系人字母排序...

    android studio拍照+选择图片

    在Android开发中,"android studio拍照+选择图片"是一个常见的需求,主要涉及到用户交互和多媒体处理方面的技术。本文将深入探讨如何在Android Studio项目中实现这两个功能,包括使用相机拍照和从图库选择图片。 ...

    android服务端jsp+servlet+mysql

    首先,Android是Google开发的开源移动操作系统,用于智能手机和平板电脑。开发者可以使用Java或Kotlin语言来编写Android应用。在这个场景中,Android客户端负责用户界面交互,发送HTTP请求到服务端,接收并处理响应...

    android快速滑动列表+首字母提示(改进版)

    这种功能可以提高用户体验,让用户能够迅速定位并选择所需项。本教程将深入探讨如何在Android应用中实现这样一个改进版的快速滑动列表。 首先,我们需要理解`ListView`的基本用法。`ListView`是Android系统提供的一...

    Android+OpenCV+人脸识别源码(完整)

    这个“Android+OpenCV+人脸识别源码(完整)”项目,正是一个整合了Android与OpenCV的示例,用于在Android设备上实时检测和识别人脸。 首先,OpenCV(开源计算机视觉库)是这个项目的核心组件。它是一个跨平台的库...

    android sdk25版本,对应android7.0

    Android SDK是开发Android应用程序的关键工具集,它包含了各种库、工具和API文档,使得开发者能够构建、测试和调试他们的应用。在本例中,我们关注的是SDK的两个特定版本:Android 7.0 (Nougat) 和 Android 8.0 ...

    android 中文版 选择国家对应区号发生变化Demo

    在Android开发中,有时我们需要为用户提供一个功能,允许他们选择国家并自动匹配相应的区号,以便于电话号码的输入或国际通话。这个“android 中文版 选择国家对应区号发生变化Demo”就是一个针对这一需求的示例应用...

    android国家地区代码对应电话区号

    选择不同国家地区,获取得到不同国家地区的电话号码的区号代码,比如选择china, 得到+86

    Android手机号码归属地查询源码

    在Android开发中,有时我们需要实现一个功能,即查询手机号码的归属地信息。"Android手机号码归属地查询源码"就是一个实现此功能的项目,它包括了处理手机号码文本、数据库以及Android应用程序的源代码。这个项目...

    Android+Servlet+MySQL

    在本项目中,我们主要涉及三个核心技术:Android、Servlet和MySQL。这三者结合,构建了一个简单的移动应用数据交互系统,使得Android客户端可以与后台服务器进行数据通信,并通过MySQL数据库存储和检索信息。 首先...

    【Android】Android 监听网络状态+源代码

    在Android开发中,网络状态监听是一项重要的功能,它允许应用根据网络连接情况做出相应的响应,例如在无网络连接时提示用户、自动重试网络请求等。本教程将深入讲解如何在Android应用程序中实现网络状态的监测,并...

    android快速滑动列表+首字母提示(仿通讯录,iphone)

    这个功能让用户能够迅速定位并选择所需的联系人,通过滑动右侧的字母栏,列表会自动滚动到对应首字母的联系人。下面我们将详细探讨如何构建这样一个功能。 首先,我们需要一个ListView或RecyclerView作为列表的基础...

    Android强大的日期时间选择控件

    在Android开发中,日期时间选择控件是用户界面中常见且重要的组成部分,它允许用户方便地选择日期或时间。在Android SDK中,内置了DatePicker和TimePicker两种原生控件,但有时候,开发者可能需要更加强大、定制化的...

Global site tag (gtag.js) - Google Analytics