Android SMS 按收件人 ID 显示联系人姓名
Posted
技术标签:
【中文标题】Android SMS 按收件人 ID 显示联系人姓名【英文标题】:Android SMS show contact name by recipient_ids 【发布时间】:2014-03-02 19:06:23 【问题描述】:下面的代码sn-p返回基本的短信对话数据:
Cursor cursor = activity.getContentResolver().query(Uri.parse( "content://mms-sms/conversations?simple=true"), null, null, null, "normalized_date desc" );
if(cursor.moveToFirst())
String recipient_ids = cursor.getString(3);
我的问题是,给定收件人 ID,我如何获取手机的联系人数据?在这种情况下,我需要检索联系人号码和联系人 display_name。
非常感谢您的帮助。提前致谢!
【问题讨论】:
这似乎在装有 android 4.3 的 Galaxy Note 2 上崩溃。错误是Caused by: android.database.sqlite.SQLiteException: no such column: normalized_date (code 1): , while compiling: SELECT * FROM threads ORDER BY normalized_date desc
。如何确定 normalized_date 列是否不存在?我已经在其他版本的 android 上测试过这个没有问题。
【参考方案1】:
试试这个:
public String getContactData(String id)
String number;
Cursor phones = fa.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id, null, null);
if(phones.moveToFirst())
number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
phones.close();
return number;
希望对你有帮助!
【讨论】:
【参考方案2】:这就是我的应用程序的工作原理:
private String getContactNumber(final long recipientId)
String number = null;
Cursor c = getContentResolver().query(ContentUris
.withAppendedId(Uri.parse("content://mms-sms/canonical-address"), recipientId),
null, null, null, null);
if (c.moveToFirst())
number = c.getString(0);
c.close();
return number;
联系人号码保存在一个名为canonical-address
的表中。
几年前它有点马车。联系人的更新未通过此表正确传播。但我认为现在很好。
您基本上需要将(列表)id 解析为单个 id。然后查询数据库中的每一个。 不过,您可以对所有 ID 一起使用一个查询。
【讨论】:
感谢您的回答,但它给了我这个错误java.lang.IllegalStateException: Unrecognized URI:content://mms-sms/canonical-address
请尝试使用附加 / 的 uri。它在我的应用程序中运行了 5 年。 ;-) 尝试用 "_id="+recipientId
的选择替换 contenturi 的东西
在某些手机中出现此异常致命异常:android.database.sqlite.SQLiteException 没有这样的列:data1(代码 1):,编译时:SELECT data1 FROM canonical_addresses WHERE _id=1127跨度>
以上是关于Android SMS 按收件人 ID 显示联系人姓名的主要内容,如果未能解决你的问题,请参考以下文章
Android 从收件箱获取短信,优化的方式来阅读所有消息并将它们分组