博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 2.0 API 获取通讯录中电话号码的例子
阅读量:5153 次
发布时间:2019-06-13

本文共 3023 字,大约阅读时间需要 10 分钟。

转自:

最近开始学习Android,主要看的是《Android应用开发揭秘》,在第3章的Example_03_02是一个读取通讯录联系人姓名和电话 的实例,但由于API 2.0中,每个联系人可以有多个电话(例如手机、住宅、公司、传真等),书中原有的实例在API 2.0的环境中会报错。

书中的Example_03_02代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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);
    
}
}

参考网上的资料,找到了正确读取联系人电话的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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 PhoneNumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                
string += (contact +
":"
+ PhoneNumber +
"\n"
);
            
}
        
}
        
cursor.close();
         
        
//设置TextView显示的内容
        
tv.setText(string);
        
//显示到屏幕
        
setContentView(tv);
    
}
}

最后记得在AndroidManifest.xml声明读取联系人的API:

1
<
uses-permission
android:name
=
"android.permission.READ_CONTACTS"
/>

转载于:https://www.cnblogs.com/SuperJunior/archive/2012/04/11/2442645.html

你可能感兴趣的文章
如何将应用完美迁移至Android P版本
查看>>
【转】清空mysql一个库中的所有表的数据
查看>>
基于wxPython的python代码统计工具
查看>>
淘宝JAVA中间件Diamond详解(一)---简介&快速使用
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
Kettle学习系列之Kettle能做什么?(三)
查看>>
Day03:Selenium,BeautifulSoup4
查看>>
awk变量
查看>>
mysql_对于DQL 的简单举例
查看>>
35. Search Insert Position(C++)
查看>>
[毕业生的商业软件开发之路]C#异常处理
查看>>
一些php文件函数
查看>>
有关快速幂取模
查看>>
Linux运维必备工具
查看>>
字符串的查找删除
查看>>
NOI2018垫底记
查看>>
快速切题 poj 1002 487-3279 按规则处理 模拟 难度:0
查看>>
Codeforces Round #277 (Div. 2)
查看>>
【更新】智能手机批量添加联系人
查看>>
NYOJ-128前缀式计算
查看>>