Android应用开发揭秘-获取电话联系人及号码

Android应用开发揭秘-获取电话联系人及号码}//以下为官网API注解ContactsContract.CommonDataKinds.Phone.TYPE联系人电话的类型,对应如下:TYPE_MOBILE:手机号码TYPE_HOME:住宅电话TYPE_WORK:公司电话}//以下为官网API注解ContactsContract.CommonDataKinds.Phon

大家好,又见面了,我是你们的朋友全栈君。

原文链接:http://jingyan.baidu.com/article/6079ad0e6b1af428ff86db89.html

昨晚在看《Android应用开发揭秘》,在第3章的Content Provider模块演示实例Example_03_02在最新的ADT环境未能正确运行。在网上各大牛论坛与QQ群里交流,终于明白这是由于API 2.0中,每个联系人可以有多个电话(例如手机、住宅、公司、传真等),而原代码未能在这个环境中正确运行,会报错。在此分享给各位android学习的朋友们。

书中原有的示例代码如下:

文件名:Activity01.java

Example_03_02的原代码:

package com.yarin.android.Examples_03_02;import android.app.Activity;import android.content.ContentResolver;import android.database.Cursor;import android.os.Bundle;import android.provider.ContactsContract;import android.provider.ContactsContract.PhoneLookup;import android.widget.TextView;

public class Activity01 extends Activity{

    public void onCreate(Bundle savedInstanceState)

    {

        TextView tv = new TextView(this);

        String string = “”;               

super.onCreate(savedInstanceState);

            //得到ContentResolver对象

        ContentResolver cr = getContentResolver();

         //取得电话本中开始一项的光标       

Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

        //向下移动一下光标

        while(cursor.moveToNext())

        {

            //取得联系人名字

            int nameFieldColumnIndex =cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);

                 String contact = cursor.getString(nameFieldColumnIndex);//取得电话号码

            int numberFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.NUMBER);//报错,返回值为-1.

              String number = cursor.getString(numberFieldColumnIndex);

            string += (contact+”:”+number+”
“);

        }

        cursor.close();

        //设置TextView显示的内容

        tv.setText(string);

        //显示到屏幕

        setContentView(tv);   

      }

}

参考android官方API资料及网上大牛们的经验,本代码修改如下:

package com.example.helloandroid;import android.app.Activity;import android.os.Bundle;import android.provider.ContactsContract;import android.provider.ContactsContract.PhoneLookup;import android.database.Cursor;import android.widget.TextView;import android.content.ContentResolver;

public class Activity01 extends Activity{

    public void onCreate(Bundle savedInstanceState)

    {

        TextView tv = new TextView(this);

        String string = “”;

        super.onCreate(savedInstanceState);

        //得到ContentResolver对象

        ContentResolver cr = getContentResolver();

        //取得电话本中开始一项的光标

        Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

        //向下移动光标

        while(cursor.moveToNext())

        {

            //取得联系人名字

            int nameFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);

            String contact = cursor.getString(nameFieldColumnIndex);

           //取得电话号码

            String ContactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));            Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + “=” + ContactId, null, null);

            while(phone.moveToNext())

            {

                String Number = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));                string += (contact + “:” + Number + “
“);

            }

        }

        cursor.close();

        //设置TextView显示的内容

        tv.setText(string);

        //显示到屏幕

        setContentView(tv);

    }

}

//以下为官网API注解

ContactsContract.CommonDataKinds.Phone.TYPE

联系人电话的类型,对应如下:TYPE_MOBILE : 手机号码TYPE_HOME : 住宅电话TYPE_WORK : 公司电话

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136464.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 青龙面板一键搭建(openwrt安装青龙面板)

    大家好,QX系列教程教会了大家js脚本挂机的基础玩法,Boxjs为这个玩法提升了不少可玩性,但是IOS系统下最多支持2个账号,许多助力需求无法满足,应群友要求出一个青龙从零开始搭建教程,欢迎大家入群交流:106511927注意教程看不懂的话可以进群找群主帮你代挂!如果本教程看不懂或者操作出现问题,证明您的计算机专业知识并不支持本文章的搭建操作。第一步购买云服务器个人推荐阿里云服务器1核2G即可搞活动一年一百来块钱系统选择CentOs7等待配置完成。百度搜索Finalshell下载安装

    2022年4月18日
    227
  • mos管的基本开关电路_mos管控制交流开关电路

    mos管的基本开关电路_mos管控制交流开关电路    MOS管也就是常说的场效应管(FET),有结型场效应管、绝缘栅型场效应管(又分为增强型和耗尽型场效应管)。也可以只分成两类P沟道和N沟道,这里我们就按照P沟道和N沟道分类。对MOS管分类不了解的可以自己上网查一下。    场效应管的作用主要有信号的转换、控制电路的通断,这里我们讲解的是MOS管作为开关管的使用。对于MOS管的选型,注意4个参数:漏源电压(D、S两端承受的…

    2022年9月20日
    1
  • 01_SpringBoot概述

    01_SpringBoot概述

    2021年8月22日
    78
  • 数据结构完全二叉树性质

    数据结构完全二叉树性质完全二叉树若二叉树左子树高度-右子树高度小于等于1且大于等于0则称该二叉树为完全二叉树。二叉树一般性质:性质1:二叉树第i层上的结点数目最多为2i−1(i≥1)2^{i-1}(i\geq1)2i−1(i≥1)性质2:深度为k的二叉树至多有2k−1(k≥1)2^{k-1}(k\geq1)2k−1(k≥1)个结点性质3:包含n个结点的二叉树的高度至少为log⁡2n+1\log_2n+1log2​n+1性质4:在任意一棵二叉树中,若叶子结点的个数为n0n_0n0​,度为2的结点数为n2n_2n

    2022年5月31日
    55
  • java最长递增子序列_JAVA最长递增子序列「建议收藏」

    java最长递增子序列_JAVA最长递增子序列「建议收藏」问题描述LIS(LongestIncreasingSubsequence,最长递增子序列):给出一个序列a1,a2,a3,a4,a5,a6,a7…an,求它的一个子序列(设为s1,s2,…sn),使得这个子序列满足这样的性质,s1最长递增子序列实例分析17359481最长递增子序列算法设计设b[i]是在a[i]为单调递增子序列最后一个元素时,所得最长单调递增…

    2022年6月11日
    30
  • Xmind快捷键(mac版和wind版本)

    Xmind快捷键(mac版和wind版本)https://www.xmind.net/m/ZQPm/

    2022年6月5日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号