【问题标题】:How to read sms sender's name?如何读取短信发件人的姓名?
【发布时间】:2014-08-02 19:24:07
【问题描述】:

我使用 Uri.parse("content://sms/inbox") 来阅读短信,但我不知道如何阅读发件人的姓名。我遇到了类似的问题,但找不到明确的答案,只有使用建议:

ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null,null, null);
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

这给了我我的联系人的名字,但不是每条短信的具体名字。

顺便说一句,当我使用“body”时,它会显示我所有的 SMS 历史记录。有没有办法检查:

messageString = cursor.getString(0); //let's say 0 is "body"
(messageString == "HI") txt.setText("BYE");

而不仅仅是获取完整的收件箱内容?

【问题讨论】:

  • 您需要获取 SMS 的地址,然后使用该地址签入您的联系人,在某些手机中显示名称可能为空,并且要检查字符串,请使用 .equals() 而不是 ==

标签: android sms inbox


【解决方案1】:

首先获取发件人电话号码,然后将发件人号码与联系人列表中的号码进行比较,如下所示:

Cursor phones = getContentResolver().query(ContactsContract.
CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
while (phones.moveToNext())
{
String name=phones.getString(phones.getColumnIndex(ContactsContract.
CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.
CommonDataKinds.Phone.NUMBER));
  if (phoneNumber.equals(senderphonenumber)){
      //do something
   }
   }
  phones.close();

【讨论】:

  • 好的,最后一个问题,我检查了phoneNumber和senderphonenumber是否相同后,如何输入告诉我发件人姓名的部分?将电话号码更改为 DISPLAY_NAME?
  • 很简单,在上面的代码中你可以看到 String name 它的 return name off contact !查看代码,如果有用,请选择最佳答案。
  • 要比较电话号码,您应该使用 PhoneNumberUtils.compare()。它考虑了代码等,因此您可以匹配格式不完全相同但仍然是相同数字的数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
  • 2021-02-28
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
相关资源
最近更新 更多