读取本地通讯录

windy731 2009-06-05 10:06:16
刚接触手机开发,想写一个操作本地通讯录中联系人的小软件,在通过PIM读取联系人信息时遇到了一些问题,请大家多多指教。

1、读取名字的方法是不是contact.getString(Contact.NAME, 0)?其中getString方法的第二个参数代表什么?Contact.NAME的其他类似常量(比如Contact.NAME_GIVEN、Contact.NAME_OTHER等)与NAME的区别和对应的联系人信息是什么?

2、读取电话的方法是不是contact.getString(Contact.TEL, 0)?同样第二个参数代表什么?

3、如何读取复杂的比如工作电话、家庭电话这些信息,Contact没有代表这些信息的常量,如何读取呢?
...全文
97 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdluhaibing 2009-06-05
  • 打赏
  • 举报
回复
路过
windy731 2009-06-05
  • 打赏
  • 举报
回复
另外,再顺便问一下,一般的程序可以用模拟器来测试,可需要读取手机通讯录的程序如何测试呢?每次都要生成jar文件后放到真机上调试吗?应该会有更好的测试方法吧?
windy731 2009-06-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ccbingyi 的回复:]
读取本地通讯录?
[/Quote]

对,就是手机中的通讯录。有什么不对的地方吗?
windy731 2009-06-05
  • 打赏
  • 举报
回复
谢谢yfllrj , 很详细,结贴去试试
yfllrj 2009-06-05
  • 打赏
  • 举报
回复
1.Contact.FORMATTED_NAME和Contact.NAME对应的字段是不一样的,在索爱手机中只支持Contact.NAME,而一些moto手机只支持FORMATTED_NAME,只有Nokia的一些机型是即支持NAME又支持FORMATTED_NAME,但在手机通讯录里,NAME对应的是“姓”和“名”,FORMATTED_NAME对应的是“真实姓名”。所以你要分别取得姓和名,必须要通过Contact.NAME取得。

2.如果你的手机有5个电话号码,那么j的范围就是0-4,可以通过getAttributes方法取得这5个电话号码对应的类型,如你说的是家庭电话还是公司电话还是移动电话等等!

3.模拟器上是可以获取的联系人信息,找到你使用的模拟器所在地文件路径下的“appdb”文件夹,再找到的你使用的机型文件夹,在该文件夹下的pim文件夹(没有可以新建一个),\pim\contacts\Contacts,添加vcf格式的联系人信息,在模拟器上就可以读取了!
vcf格式联系人信息格式如下:
BEGIN:VCARD
VERSION:3.0
FN:sdf
N:haha;;;;
REV:2008-09-04
TEL;TYPE=HOME:1234
TEL;TYPE=WORK:2345
TEL;TYPE=CELL,PREF:3456
TEL;TYPE=FAX:5678
TEL;TYPE=X-J2MEWTK-OTHER:6789
UID:1.vcf
END:VCARD
windy731 2009-06-05
  • 打赏
  • 举报
回复
谢谢yfllrj 先,还是有几个问题没有清楚

1、Contact.FORMATTED_NAME,从字面上看应该是格式化后的名字,是不是得出来的值是名+姓或姓+名串在一起的字符串?如果我想要分别得到姓和名只有通过getStringArray方法才可以吗?

2、c.getAttributes(Contact.TEL, j)方法的作用?

3、如何测试?如果在模拟器上应该是无法获取手机中的联系人信息吧?在真机中调试又不方便,大家是如何解决这个问题的呢?
yfllrj 2009-06-05
  • 打赏
  • 举报
回复
1.取得姓名的方法不只一个,但你的方法是取不到姓名的,因为PIM中Contact.NAME字段,返回的一个数组,所以需要用getStringArray取得。

但由于不同机型对姓名的支持情况不一样,有的是支持Contact.NAME字段,但有的是不支持的,需要用c.getString(Contact.FORMATTED_NAME, 0)取得姓名。

2.如果手机中有多个同一字段的信息,例如有多个电话号码,多个邮箱地址等等,就要通过第二个参数进行区分。

3.至于如何区分诸如家庭、公司、移动的这些信息,是需要c.getAttributes(id, j)来判断该信息的类型,id是该字段,j就是取得信息的第二个参数。

如果要取得家庭电话就要判断
if(c.getAttributes(Contact.TEL, j)==Contact.ATTR_HOME)
{
//取得的就是家庭电话
c.getString(Contact.TEL, j)
}

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧