`
kevinlynx
  • 浏览: 82955 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

Android: 获取短信的发信人

阅读更多
上次的测试,通过取得短信里的person字段,然后通过person字段从联系人表里取出联系人信息,总是存在问题:
1、如果短信是在建立联系人信息之前收到的,person字段依然是0;
2、在我的真机上即使person不为0,Cursor::moveToFirst依然失败,导致获取不出联系人信息。

今天无意看到分代码SMS Backup,看到里面获取联系人信息的代码:
    private PersonRecord lookupPerson(String address) {
        if (!mPeopleCache.containsKey(address)) {
            // Look phone number
            Uri personUri = Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, address);
            Cursor phoneCursor = mContext.getContentResolver().query(personUri, PHONE_PROJECTION,
                    null, null, null);
            if (phoneCursor.moveToFirst()) {
                int indexPersonId = phoneCursor.getColumnIndex(Phones.PERSON_ID);
                int indexName = phoneCursor.getColumnIndex(People.NAME);
                int indexNumber = phoneCursor.getColumnIndex(Phones.NUMBER);
                long personId = phoneCursor.getLong(indexPersonId);
                String name = phoneCursor.getString(indexName);
                String number = phoneCursor.getString(indexNumber);
                phoneCursor.close();



大概就是说android api里提供了相对简单的查询方式:
Uri personUri = Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, address);
            Cursor phoneCursor = mContext.getContentResolver().query(personUri, PHONE_PROJECTION,
                    null, null, null);

之前我也考虑过通过号码从联系人表里遍历出联系人信息,但是,这就需要自己去处理电话号码的不同表示,例如:
+86134xxxxxxxx
甚至是飞信的转发号码:12520134xxxxxxxx。

上面列的代码中,Uri大概就可以处理自动处理以上情况。不过,上面的代码已经被google标记为deprecated,查了下文档和网络资料,我写了如下的函数:
	ContactItem getContactByAddr(Context context, final SMSItem sms) {
		Uri personUri = Uri.withAppendedPath(
				ContactsContract.PhoneLookup.CONTENT_FILTER_URI, sms.mAddress);
		Cursor cur = context.getContentResolver().query(personUri,
				new String[] { PhoneLookup.DISPLAY_NAME },
				null, null, null );
		if( cur.moveToFirst() ) {
			int nameIdx = cur.getColumnIndex(PhoneLookup.DISPLAY_NAME);
			ContactItem item = new ContactItem();
			item.mName = cur.getString(nameIdx);
			cur.close();
			return item;
		}
		return null;
	}

以上代码就可以通过电话号码取得联系人信息,在我的真机上也可以正确处理+86134xxxxxxxx/12520134xxxxxxxx之类的号码。
分享到:
评论

相关推荐

    Android短信转发APK

    它可以使Android手机具备短信转发功能; 你可以设置仅转发通信录中的发信者的短信。转发的短信包含原发信者名字或者号码,便于您回复短信,注意应该使用新短信回复。 您还可以将短信转发到您设置的电子邮件地址里。 ...

    Python小脚本:用Gmail发信

    博文链接:https://zsp.iteye.com/blog/248484

    Android Studio双向短信常驻.zip

    在Activity里启动系统后台服务,并在启动服务后关闭Activity,接着在操作系统中运行监控,直到手机收到短信之后,判断短信内容里是否有设计好的关键字,一旦发现关键字,则回复短信给发信人,进而达到自动回复的功能...

    Chat-Android:Android平台上的聊天软件

    2. 消息模型:Java对象用于存储消息数据,如发信人、收信人、消息文本、时间戳等。这些对象通常与SQLite数据库交互,以便持久化存储聊天记录。 3. 事件监听:使用Java的事件驱动模型,为按钮和其他UI元素添加点击...

    圣诞节短信圣诞祝福短信.doc

    13. 个性化祝福:每个短信都有独特的表达,反映出发信人的个性和与收信人的关系,增加了祝福的个性化和独特性。 14. 社会现象:文件中的一些短信反映了社会上的流行语或网络用语,如“懒得洗袜子”、“站着说话不...

    易语言伪装邮箱发信源码

    易语言是一种专为中国人设计的编程语言,它以简体中文作为编程语法,降低了编程的门槛,使得更多非计算机专业的人也能快速上手编程。在本案例中,我们讨论的主题是“易语言伪装邮箱发信源码”,这涉及到电子邮件发送...

    QQKEY获取 发信

    除了常规的登录验证,QQ还提供了多种方式来获取和使用QQKEY,如手机短信验证、邮箱验证、手机QQ应用验证等。这些方式旨在为用户提供更多的安全选项,同时也方便在忘记密码或者无法访问常用设备时,仍能验证身份并...

    实现短信在线发送的ASP代码

    ### 实现短信在线发送的ASP代码解析 #### 1. 概述 本文将详细介绍一个用于实现短信在线发送功能的ASP代码。此功能允许用户在输入手机号码后,通过网站直接向该手机号发送短信,非常适用于企业网站进行客户服务或...

    SIM800A发送与接收短信

    SIM800A模块是GSM/GPRS通信模块,常用于嵌入式系统中实现语音通话、短信收发以及数据传输等功能。STM32F103ZET6是一款基于ARM Cortex-M3内核的微控制器,具有丰富的外设接口和较高的处理能力,非常适合与SIM800A配合...

    【祝福语】老师给同学的春节快乐祝福短信.doc

    8. **情感表达**:短信内容应注重情感的传递,让收信人感受到发信人的真诚与关怀,如“真心祝愿”、“永远幸福”等词汇可以增强情感的表达。 9. **短信的排版**:好的祝福短信要注意格式和段落,使内容清晰易读,...

    搞笑的六一儿童节祝福短信.doc

    2. **幽默与情感表达**:通过幽默的方式传达祝福,可以使接收者在轻松的氛围中感受到祝福者的善意,同时也体现了发信人的幽默感和创意。 3. **文化传统**:六一儿童节是中国及许多国家庆祝儿童的节日,通过这些短信...

    android聊天小项目

    消息内容会被编码为JSON格式,包括发信人、接收人、消息文本等关键信息。 3. **消息模型设计**:在设计聊天系统时,我们需要定义消息模型,包括消息类型(文本、图片、语音等)、时间戳、状态(已发送、已读等)。...

    经典生日祝词短信.doc

    2. **情感表达**:祝福语应包含真诚的情感,无论是感激、欣赏、祝福还是关爱,都应该让接收者感受到发信人的真情实感。 3. **积极正面**:祝福短信的内容通常充满正能量,旨在鼓励和激励收信人在新的一年或新的一岁...

    智简魔方 - 魔方财务-MC云短信插件

    使用在智简魔方产品魔方财务IDC系统的短信通知验证码插件!...短信签名:发信的签名 MC云 | 无需添加【】 Secret ID:也是用户名 Secret Key:最短的就是哦 活动最低 0.025 / 条 一般 0.03 / 条 都是随机应变的哦!

    电信短信功能简介

    这种模式被称为“你来电,我发信”。 #### 二、如何预先设定短信 1. **添加号码**:首先在系统的“号簿管理”功能中添加一个或多个电话号码。这里需要注意的是,首次添加的号码应当是管理员账号,以便后续的操作和...

    伪基站电信诈骗中文短信数据集

    伪基站(Fake-base-station,FBS)是一种高科技仪器,一般由主机和笔记本电脑组成,通过短信群发器、短信发信机等相关设备能够搜取以其为中心、一定半径范围内的手机卡信息,通过伪装成运营商的基站,任意冒用他人...

    蜡笔同步 For Android v2.1.0.zip

    蜡笔同步是国内第一个实现联系人、短信、日历与通话记录实时同步的手机软件。除了能够备份手机数据之外,还能让你在网站上遥控手机:在网站上...任意定制短信的收件人与发信人、收发时间等,注意:虚拟短信仅供娱乐喔!

    shopex 短信模板

    发信人邮箱:你的QQ邮箱 smtp服务器地址:smtp.qq.com smtp服务器端口:25 smtp用户名:QQ号码 smtp密码:QQ密码 联通号码操作步骤: 打开登陆:http://mail.wo.com.cn/ 输入用户名和密码; 登陆后,邮箱...

    【祝福语】春节放假同学祝福短信.doc

    【春节祝福短信的知识点】 ...在发送春节祝福短信时,应注意语言的温馨和诚挚,让接收者能够感受到发信人的祝福之心,同时也可以根据彼此的关系和共同经历来定制更个性化的祝福,使得祝福短信更加贴心和有意义。

Global site tag (gtag.js) - Google Analytics