android获取手机录
在Android开发中,读取手机通讯录中的号码是一种基本操作,但是由于Android的版本众多,所以手机通讯录操作的代码比较纷杂,在本文中进行一下总结。
Android1.5是现在的Android系统中最低的版本,首先来说一下适用于Android1.5及以上版本(含2.X,3.X)的代码实现:
//获得所有的联系人
Cursor cur = context.getContentResolver().query(
Contacts.People.CONTENT_URI,
null,
null,
null,
Contacts.People.DISPLAY_NAME +" COLLATE LOCALIZED ASC");
// 循环遍历
if (cur.moveToFirst()) {
int idColumn = cur.getColumnIndex(Contacts.People._ID);
int displayNameColumn = cur.getColumnIndex(Contacts.People.DISPLAY_NAME);
do {
// 获得联系人的ID号
String contactId =cur.getString(idColumn);
// 获得联系人姓名
String disPlayName =cur.getString(displayNameColumn);
//获取联系人的电话号码
CursorphonesCur = context.getContentResolver().query(
Contacts.Phones.CONTENT_URI,null,
Contacts.Phones.PERSON_ID+ "=" + contactId, null, null);
if (phonesCur.moveToFirst()) {
do {
// 遍历所有的电话号码
StringphoneType = phonesCur.getString(phonesCur
.getColumnIndex(Contacts.PhonesColumns.TYPE));
String phoneNumber =phonesCur.getString(phonesCur
.getColumnIndex(Contacts.PhonesColumns.NUMBER));
//自己的逻辑处理代码
}while(phonesCur.moveToNext());
}
}while (cur.moveToNext());
}
cur.close();
使用这段代码可以在各种版本的Android手机中读取手机通讯录中的电话号码,而且可以读取一个姓名下的多个号码,但是由于使用该代码在2.x版本中的效率不高,读取的时间会稍长一些,而且2.x现在是Android系统的主流,至少占有80%以上的Android手机份额,所以可以使用高版本的API进行高效的读取。
适用于Android2.0及以上版本的读取通讯录的代码如下:
//读取手机本地的电话
ContentResolver cr =context.getContentResolver();
//取得电话本中开始一项的光标,必须先moveToNext()
Cursor cursor =cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
while(cursor.moveToNext()){
//取得联系人的名字索引
int nameIndex =cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);
String name = cursor.getString(nameIndex);
//取得联系人的ID索引值
String contactId =cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
//查询该位联系人的电话号码,类似的可以查询email,photo
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));
listName.add(name);
listPhone.add(phoneNumber);
}
phone.close();
}
cursor.close();
如果需要读取SIM卡里面的通讯录内容,则可以使用:”content://icc/adn”进行读取,代码如下:
try{
Intent intent = new Intent();
intent.setData(Uri.parse(“content://icc/adn”));
Uri uri = intent.getData();
ContentResolvercr = context.getContentResolver();
Cursor cursor =context.getContentResolver().query(uri, null, null, null, null);
if (cursor != null) {
while(cursor.moveToNext()){
//取得联系人的名字索引
int nameIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);
String name = cursor.getString(nameIndex);
//取得联系人的ID索引值
String contactId =cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
//查询该位联系人的电话号码,类似的可以查询email,photo
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));
//自己的逻辑代码
}
phone.close();
}
cursor.close();
}
}catch(Exception e){}
通讯录上的信息,存储在两个地方,一个是SIM卡,一个是手机本地,
首先是手机本地:
Cursor cursor = getContentResolver().query(People.CONTENT_URI, null,
null, null, null);
while (cursor.moveToNext()) {
ContactInfo cci = new ContactInfo();
//取得联系人名字
int nameFieldColumnIndex = cursor.getColumnIndex(People.NAME);
cci.contactName = cursor.getString(nameFieldColumnIndex);
//取得电话号码
int numberFieldColumnIndex = cursor.getColumnIndex(People.NUMBER);
cci.userNumber = cursor.getString(numberFieldColumnIndex);
cci.userNumber = GetNumber(cci.userNumber);
cci.isChecked = false;
if (IsUserNumber(cci.userNumber)) {
if (!IsContain(contactList, cci.userNumber)) {
if(IsAlreadyCheck(wNumStr, cci.userNumber)){
cci.isChecked = true;
numberStr += "," + cci.userNumber;
}
contactList.add(cci);
//Log.i("eoe", "*********"+cci.userNumber);
}
}
}
cursor.close();
}
下面是获取SIM卡:
//从SIM卡中取号
private void GetSimContact(String add){
//读取SIM卡手机号,有两种可能:content://icc/adn与content://sim/adn
try {
Intent intent = new Intent();
intent.setData(Uri.parse(add));
Uri uri = intent.getData();
mCursor = getContentResolver().query(uri, null, null, null, null);
if (mCursor != null) {
while (mCursor.moveToNext()) {
ContactInfo sci = new ContactInfo();
// 取得联系人名字
int nameFieldColumnIndex = mCursor.getColumnIndex("name");
sci.contactName = mCursor.getString(nameFieldColumnIndex);
// 取得电话号码
int numberFieldColumnIndex = mCursor
.getColumnIndex("number");
sci.userNumber = mCursor.getString(numberFieldColumnIndex);
sci.userNumber = GetNumber(sci.userNumber);
sci.isChecked = false;
if (IsUserNumber(sci.userNumber)) {
if (!IsContain(contactList, sci.userNumber)) {
if(IsAlreadyCheck(wNumStr, sci.userNumber)){
sci.isChecked = true;
numberStr += "," + sci.userNumber;
}
contactList.add(sci);
//Log.i("eoe", "*********"+sci.userNumber);
}
}
}
mCursor.close();
}
} catch (Exception e) {
Log.i("eoe", e.toString());
}
}
以上是将获取到的信息对象方法ArrayList<ContactInfo> contactList里面,然后砸显示的是采用适配器,这样就完成了
在写的时候,一定要注意获取的方式。
android获取手机录的更多相关文章
- Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息
Android 获取手机信息,设置权限,申请权限,查询联系人,获取手机定位信息 本文目录: 获取手机信息 设置权限 申请权限 查询联系人 获取手机定位信息 调用高德地图,设置显示2个坐标点的位置,以及 ...
- android API版本对应的系统版本及Android获取手机和系统版本等信息的代码
学了这么久的Android,竟然一直对其API对应的名称关系一值搞不清楚,现在网上认真看了下资料,转载一个觉得写得不错的作者的文章,记下来: [背景] 之前折腾android期间,慢慢地知道了,And ...
- Android 获取手机的厂商、型号、Android系统版本号等工具类(转载)
Android 获取手机的厂商.型号.Android系统版本号等工具类 1.获取手机制造厂商 2.获取手机型号 3.获取手机系统当前使用的语言 4.获取Android系统版本号 5.获取手机IMEI串 ...
- Android中手机录屏并转换GIF的两种方式
之前在博文中为了更好的给大家演示APP的实现效果,本人了解学习了几种给手机录屏的方法,今天就给大家介绍两种我个人用的比较舒服的两种方法: (1)配置adb环境后,使用cmd命令将手机界面操作演示存为视 ...
- Android 获取手机Mac地址,手机名称
/** * 获取手机mac地址<br/> * 错误返回12个0 */ public static String getMacAddress(Context context) { // 获取 ...
- android获取手机信息大全
IMEI号,IESI号,手机型号: private void getInfo() { TelephonyManager mTm = (TelephonyManager) getSystemServic ...
- Android获取手机制作商,系统版本等
在开发中 我们有时候会需要获取当前手机的系统版本来进行判断,或者需要获取一些当前手机的硬件信息. android.os.Build类中.包括了这样的一些信息.我们可以直接调用 而不需要添加任何的权限和 ...
- Android获取手机设备识别码(IMEI)和手机号码
最近看了下获取手机设备ID和手机信息以及SIM的信息例子,主要还是借鉴别人的,现在自己写一下,算是巩固加深了,也希望能给大家一个参考 必要的条件还是一部真机,SIM卡或者UIM卡. 首先,在Andro ...
- android获取手机信息2
IMEI号,IESI号,手机型号: private void getInfo() { TelephonyManager mTm = (TelephonyManager) getSystemServic ...
随机推荐
- php头函数和浏览器缓存
可以通过php头函数改变返回给浏览器的头信息 例: 代码中添加头: header("Cache-Control: max-age=31536000"); header(" ...
- [drp 8]get和post的区别,以及乱码问题的解决
导读:不管是之前做.NET还是现在做Java的项目,都有涉及到get和post请求,第一次遇到的时候,应该是在人事系统的时候,那时候说要总结,结果一直没有总结.现在,做一个初步的总结,连着总结一下提交 ...
- centOS 6.4下安装中文输入法
1.用root登录 ,或su root 2.yum install "@Chinese Support" 3.exit 4.回到桌面,system->preferences- ...
- windows 2003 修改远程桌面连接数详细方法
Windows Server 2003默认情况下允许远程终端连接的数量是2个用户,我们可以根据需要适当增加远程连接同时在线的用户数. 单击“开始→运行”,输入“gpedit.msc”打开组策略编辑器窗 ...
- iOS播放动态GIF图片
<转> 图片分为静态和动态两种,图片的格式有很多种,在开发中比较常见的是.png和.jpg的静态图片,但有的时候在App中需要播放动态图片,比如.gif格式的小表情头像,在IOS中并没有提 ...
- s3c6410_MMU地址映射过程详述
参考: 1)<ARM1176 JZF-S Technical Reference Manual>: Chapter 3 System Control Coprocessor Chapter ...
- 搭建高性能计算环境(八)、应用软件的安装之gromacs
1,下载安装新版本的gcc(高版本的gcc只是推荐使用的,系统自带的gcc4.4照样能正常编译.运行) wget http://ftp.tsukuba.wide.ad.jp/software/gcc/ ...
- nth-of-type和nth-child的区别
看CSS3时发现了一个nth-of-type选择器,发现平时基本没见过用,就研究了一下,w3c是这样说明的: :nth-of-type(n) 选择器匹配属于父元素的特定类型的第 N 个子元素的每个元素 ...
- jQuery中$(function() {});问题详解
$(function() {});是$(document).ready(function(){ })的简写,最早接触的时候也说$(document).ready(function(){ })这个函数是 ...
- Win 2003下IIS6+Mysql+php5.2 isapi搭建 升级php5.2到5.3测试 借助fastcgi实现
Win 2003下IIS6+Mysql+php5.2 原环境isapi搭建 升级php5.2到5.3测试 借助fastcgi实现 操作如下 实验前准备:php-5.3.5-Win32-VC6-x86 ...