Android 2.0 API 读取通讯录中电话号码的实例

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+"\n");
        }
        cursor.close();
        //设置TextView显示的内容
        tv.setText(string);
        //显示到屏幕
        setContentView(tv);
    }
}
参考网上的资料,找到了正确读取联系人电话的方法:
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 PhoneNumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                string += (contact + ":" + PhoneNumber + "\n");
            }
        }
        cursor.close();
        
        //设置TextView显示的内容
        tv.setText(string);
        //显示到屏幕
        setContentView(tv);

最后记得在AndroidManifest.xml声明读取联系人的API:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
如果我们只想获取手机号如何操作呢?
Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + ContactId, null, null);
把以上语句改为:
Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + ContactId + " AND " + ContactsContract.CommonDataKinds.Phone.TYPE + "=" + ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE, null, null);
ContactsContract.CommonDataKinds.Phone.TYPE 表示联系人电话的类型,主要对应如下:
TYPE_MOBILE : 手机号码

TYPE_HOME : 住宅电话
TYPE_WORK : 公司电话


原文链接:http://www.cnblogs.com/freebsd-pann/archive/2011/08/13/2137387.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要在Android Studio读取通讯录,您需要使用ContentResolver类和ContactsContract类。您可以使用ContentResolver查询ContactsContract.Contacts表以获取所有联系人的ID,然后使用ContactsContract.CommonDataKinds.Phone表查询每个联系人的电话号码。您还可以使用ContactsContract.CommonDataKinds.Email表查询每个联系人的电子邮件地址。请注意,您需要在AndroidManifest.xml文件添加READ_CONTACTS权限才能访问通讯录数据。 ### 回答2: Android Studio是一款为Android应用程序开发专门设计的集成开发环境(IDE)。通讯录是存储联系人信息的集合,包括姓名、电话号码、电子邮件等。在开发Android应用程序时,我们通常需要访问设备上的通讯录,并读取的联系人信息。下面我们将详细介绍如何在Android Studio读取通讯录。 第一步是添加必要的权限。在AndroidManifest.xml文件添加以下代码: ``` <uses-permission android:name="android.permission.READ_CONTACTS" /> ``` 这将授予应用程序读取通讯录的权限。 第二步是编写代码。我们可以使用ContentResolver类来读取通讯录: ``` ContentResolver contentResolver = getContentResolver(); Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); if (cursor.getCount() > 0) { while (cursor.moveToNext()) { String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null); while (phoneCursor.moveToNext()) { String phone = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } phoneCursor.close(); } } } cursor.close(); ``` 以上代码将查询所有联系人,并将它们的姓名和电话号码显示在控制台上。 完成以上两个步骤后,我们便能够在Android Studio成功读取通讯录了。需要注意的是,读取通讯录的操作可能会很耗时,因此应该避免在UI线程上执行此操作,以免造成不良用户体验。建议使用AsyncTask或Loader等异步工具来执行此操作。 ### 回答3: 在Android Studio读取通讯录需要使用ContentProvider和Cursor对象来获取数据。ContentProvider是一个Android框架的核心组件,用于管理应用程序的数据,包括通讯录信息。通讯录数据可以使用ContactsContract类来访问。 首先,我们需要在AndroidManifest.xml文件添加读取通讯录的权限: ```xml <uses-permission android:name="android.permission.READ_CONTACTS" /> ``` 接下来,在Activity或Fragment获取通讯录数据。我们可以用以下代码来获取所有联系人的姓名和手机号码: ```java ContentResolver contentResolver = getContentResolver(); String[] projection = new String[] { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER }; Cursor cursor = contentResolver.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, null, null, null ); if (cursor != null) { while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); Log.d(TAG, "Name: " + name + " Phone Number: " + phoneNumber); } cursor.close(); } ``` 上面的代码首先获取了ContentResolver对象,然后使用projection数组获取需要的通讯录信息,使用ContentResolver的query方法获取通讯录数据Cursor对象。最后使用while循环遍历Cursor对象,获取每个联系人的姓名和手机号码。 注意,应该在使用完Cursor对象后及时关闭它,以释放资源。 以上就是在Android Studio读取通讯录的方法。读取通讯录Android开发经常用到的一个功能,也是了解ContentProvider和Cursor对象的重要一步。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值