`
407827531
  • 浏览: 1076428 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

读取联系人 2.0

阅读更多

推荐安卓开发神器(里面有各种UI特效和android代码库实例)

一下文章引自网络快照
http://203.208.37.132/search?q=cache:65WdqffxH-UJ:konshi.blogspot.com/2009/12/android-20.html+ContactsContract&cd=16&hl=zh-CN&ct=clnk&gl=cn&inlang=zh-CN&client=aff-avalanche&st_usg=ALhdy2-Kg5_1uawrMLIyiSfUHm1PLeA1GQ


如果使用了

import android.provider.Contacts;
import android.provider.Contacts.People;


就要特別注意一下,
因為在android 2.0 SDK當中不建議使用,
請改用

import android.provider.ContactsContract;
import android.provider.ContactsContract.PhoneLookup;


要取得聯絡人的姓名sample code如下:

final Cursor people = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

while(people.moveToNext())
{
int nameFieldColumnIndex = people.getColumnIndex(PhoneLookup.DISPLAY_NAME);
String contact = people.getString(nameFieldColumnIndex);
}
people.close();


奇怪的事,如果要取得聯絡人的電話
如果用

int nameFieldColumnIndex = people.getColumnIndex(PhoneLookup.NUMBER);
String phone = people.getString(nameFieldColumnIndex); 
//nameFieldColumnIndex return回來的值總是 ─1,



上網google了一下,找到瞭解法,

1. 首先找到目標聯絡人的 _ID,例如要找第一個聯絡人的_ID

Cursor target = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
target.moveToFirst();
String contactId = cursor.getString(target.getColumnIndex(ContactsContract.Contacts._ID));


2. 接著透過_ID,來找電話號碼,電話號碼可能不只有一個,所以先判斷有無電話號碼

String IsPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));



3. 如果有電話,接著再去query電話號碼

if( (Integer.parseInt(IsPhone) > 0) )
{
Cursor phoneNumber = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null); 
while (phones.moveToNext())
{
String strPhoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

}
}


** 如果要查詢e-mail,程式如下

Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,null, null);

while (emails.moveToNext())
{ 
String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));

}


另外
Java代码

Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);     
while (cursor.moveToNext())   
{      
    String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));  
    String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));  
    if (Boolean.parseBoolean(hasPhone))   
    {  
        Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);       
        while (phones.moveToNext())   
        {        
            String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));      
        }       
        phones.close();      
    }      
    Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,null, null);  
    while (emails.moveToNext())   
    {                   
        String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.CommonDataColumns.DATA));  
    }      
    emails.close();     
}     
cursor.close();  



1.5

package com.activity;
import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Contacts;
import android.provider.Contacts.People;
import android.widget.TextView;
public class Main extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  TextView tv = (TextView) findViewById(R.id.TextView01);
  String columns[] = new String[] { People._ID, People.NAME,
    People.NUMBER, People.PRIMARY_EMAIL_ID,
    People.PRIMARY_ORGANIZATION_ID, People.PRIMARY_PHONE_ID,
    People.DISPLAY_NAME,
    People.IM_ACCOUNT, People.IM_HANDLE, People.PHONETIC_NAME,
    People.TYPE };
  Uri mContacts = People.CONTENT_URI;
  Cursor cur = managedQuery(mContacts, columns, // 要返回的数据字段
    null, // WHERE子句
    null, // WHERE 子句的参数
    People.NAME // Order-by子句
  );
  if (cur.moveToFirst()) {
   Cursor newcur = null;
   do {
    // 获取字段的值
    String name = cur.getString(cur.getColumnIndex(People.NAME));
    String phoneNo = cur.getString(cur
      .getColumnIndex(People.NUMBER));
    String peopleId = cur.getString(cur.getColumnIndex(People._ID));
    String[] PROJECTION = new String[] {
      Contacts.ContactMethods._ID,
      Contacts.ContactMethods.KIND,
      Contacts.ContactMethods.DATA };
    newcur = managedQuery(Contacts.ContactMethods.CONTENT_URI,
      PROJECTION, Contacts.ContactMethods.PERSON_ID + "=\'"
        + cur.getLong(cur.getColumnIndex(People._ID))
        + "\'", null, null);
    startManagingCursor(newcur);
    String email = "";
    if (newcur.moveToFirst()) {
     while (newcur.moveToNext()) {
      
      email = email+ newcur.getString(newcur.getColumnIndex(Contacts.ContactMethods.DATA));
     }
    }
    tv.setText("name = " + name + " phoneNo = " + phoneNo
      + "email = " + email);
    if (email != null && !"".equals(email)
      && email.trim().length() != 0) {
     // 此处可以取到联系人邮件
    }
   } while (cur.moveToNext());
   if (newcur != null) {
    newcur.close();// 用完得关闭吧
   }
  }
  if (cur != null)
   cur.close(); // 用完得关闭吧
 }
}

 

分享到:
评论

相关推荐

    Android2.0 中读取联系人——ContactsContract

    在Android 2.0及更高版本中,由于SDK对联系人数据的访问方式进行了更新,开发者需要使用新的API来读取和操作联系人信息。本文将详细介绍如何使用`ContactsContract`类来实现这一功能。 在Android 2.0之前,开发人员...

    AIR2.0调用应用程序

    5. 通讯录集成:与操作系统通讯录服务交互,读取或添加联系人信息。 在开发过程中,需要注意安全性和权限问题。由于NativeProcess API涉及到与本地系统的直接交互,因此可能会引发安全风险。开发者需要确保只调用受...

    EasyExcel2.0工具类

    // 收货人 @ExcelProperty(index = 1) private String address; // 地址 @ExcelProperty(index = 2) private String phoneNumber; // 联系电话 // 其他字段... } ``` 现在,我们可以编写导入和导出的方法。...

    酷派tbl联系人转换txt

    这是酷派tbl短信读取器的姊妹版。 酷派tbl联系人读取器,导出联系人为文本格式,可被...仅读取联系人姓名和联系号码,忽略分组,无法重新导入手机! 在Windows 7 x64下测试通过。需要.net framework 2.0或以上支持。

    开发 IBM Lotus Domino Web 2.0 客户机

    图1显示了Web 2.0客户机的初始界面,而图2展示了“读取文档”视图,其中列出了Contacts数据库的联系人。这种Web 2.0客户端不仅提供了直观的用户界面,还实现了与Lotus Domino服务器的高效通信,使得数据的获取和编辑...

    NPOI组件读取Excel与通过Gmail联系人的导入Demo

    NPOI组件是.NET平台上一个强大的工具,专门...而利用Gmail API,你可以构建自动化工具,如同步联系人信息到数据库或其他系统。这个项目是一个很好的起点,对于学习如何在.NET环境中集成和使用这两个工具非常有价值。

    WEB2.0

    Web 2.0的核心之一是社交网络,如Facebook、LinkedIn、Instagram和Twitter等,它们构建了一个庞大的用户社区,让人们可以建立联系、分享信息、协同工作。这些平台促进了人与人之间的连接,推动了信息传播的效率。 *...

    bada2.0培训_5_1_Communication

    bada2.0提供了丰富的API,使开发者可以创建应用来控制电话功能,如拨打电话、接听电话、管理联系人等。 #### Messaging(消息服务) 消息服务覆盖了短信(SMS)、彩信(MMS)、推送消息和电子邮件等多种形式的信息...

    通讯录的设计与实现-java-version2.0

    1. **联系人增添功能**:在通讯录中,用户能够自由添加新的联系人信息,包括姓名、电话号码、电子邮件地址、地址等关键字段。这需要设计一个友好的用户界面,让用户可以方便地输入信息,并将这些数据存储在后台...

    人脸识别分类检索系统v2.0快捷特制版

    2.0新增了子目录文件批量读取,批量模板比对功能.实现大批量照片入库比对一键完成.大大方便了使用.本版本为快捷特制版,主要针对有大量图片需要批处理的需求。 本工作室致力于人工智成算法的产品化工作(有意向投资者...

    OICQ号码清理器2.0

    它提供了对OICQ号码进行删除、添加、修改等操作的功能,适用于用户整理自己的QQ联系人列表或者对账号进行管理。这款软件在早期网络通讯时代具有一定的实用性,帮助用户方便快捷地维护其OICQ账号数据库。 首先,让...

    Mobile Information Device Profile for Java 2 Micro Edition Version 2.0(MIDP 2.0).PDF

    6. **JSR-75:PIM API**:提供了一个标准接口,用于访问个人信息管理(PIM)数据,如日历、联系人和任务,使得应用程序可以更好地与用户的个人信息同步。 7. **JSR-120:WMA API**:无线消息应用编程接口,使应用...

    .nbu格式诺基亚备份文件读取工具

    1、读取nbu文件中的所有联系人信息。  2、中英文名字,均可正常显示。 3、每个联系人支持最多四个联系方式:手机、电话号码、电话号码(家庭)、电话号码(办公)。 点击联系方式左边的按钮,可将内容拷贝到剪切...

    坦克大战2.0版(图片版)Java适合初学者(用Apple写的用IE打开)

    5. **文件操作**:游戏中的图片资源需要读取和显示,这就涉及到了Java的文件I/O操作,如使用FileInputStream和BufferedImage加载和处理图像。 6. **游戏逻辑**:坦克的移动、碰撞检测、得分计算等游戏规则的实现,...

    appTest2.0

    在现代移动应用中,获取和管理用户权限至关重要,例如访问联系人、位置信息、相机、存储等。这些权限的获取不仅需要遵循各个操作系统的规定,还需要以用户友好的方式呈现。HTML5提供了部分原生接口来处理这些权限...

    truetime2.0

    2. **技术支持**:遇到问题或发现错误时,可以联系 truetime@control.lth.se 获取支持。 综上所述,TRUETIME 2.0 不仅是一款功能强大的控制器仿真软件,而且通过其丰富的文档和示例资源,使得初学者也能轻松掌握其...

    Batch库获取MSN好友信息、Gmail邮箱Yahoo邮箱Live邮箱联系人的Demo

    3. **Yahoo联系人**:Yahoo Contacts API允许开发者读取、创建、更新和删除用户的联系人。使用这个API需要注册应用并获取API密钥,然后进行授权流程以获取访问令牌。 4. **Live/Live Mail联系人**:如同MSN,Live...

    Adam电话记事程序2.0

    在这款程序中,"A.DAT"可能是一个数据文件,存储了用户的所有记事信息,包括电话号码、通话时间、联系人详情等。这种类型的数据文件通常以二进制格式保存,以便快速读取和写入。而".exe"文件,如"工程1.exe",通常是...

    Python库 | Highton-2.0.tar.gz

    这个库使得与Highrise API的交互变得简单,让开发者能够轻松地创建、读取、更新和删除Highrise中的联系人、公司、任务、事件等数据。Highton-2.0.tar.gz是一个包含Highton库2.0版本源代码的压缩包文件。 ### Python...

Global site tag (gtag.js) - Google Analytics