Android 正在收件箱/发件箱中获取电话号码

Android 正在收件箱/发件箱中获取电话号码,android,Android,我目前正在使用 ContentResolver cr = getContentResolver(); Uri uri = Uri.parse("content://sms/"); Cursor messagesCursor = cr.query(uri, new String[] { "_id", "address", "body", "person" }, null, null, null); if (messagesCursor.getCount() > 0) { while

我目前正在使用

ContentResolver cr = getContentResolver();
Uri uri = Uri.parse("content://sms/");
Cursor messagesCursor = cr.query(uri, new String[] { "_id", "address", "body", "person" }, null, null, null);

if (messagesCursor.getCount() > 0) {
    while (messagesCursor.moveToNext()) {
        colName = getContactName(messagesCursor.getString(messagesCursor.getColumnIndex("address"))) + "\n";
    }
}
获取用户收件箱中的所有文本。从那里,
messagesCursor.getColumnIndex(“地址”)
将获得短信号码。然后它将被放置在
getContactName()
中,然后从联系人列表中获取联系人的姓名

此方法将花费很长时间,因为它会遍历每一条文本消息,获取号码,然后获取联系人的姓名,检查姓名是否存在于数组中,如果未放入数组中,则从此处创建ListView

如果用户的收件箱中包含大量文本,则在启动时加载应用程序需要很长时间

有没有什么特别的方法可以从收件箱中获取唯一的号码?
cr.query
中的某些内容

提前谢谢


编辑:

我正在创建一个简单的收件箱应用程序。它读取原始收件箱消息并列出其中的消息

对于这个项目,我所做的是通读所有的“地址”,即电话号码,将其放入ArrayList,最后进入ListView。当它循环浏览收件箱中的所有消息时,启动需要很长时间

例如:

收件箱消息

  • 第一人

    第一人

    第一人

    第二人

    第二人

    第三人

    第三人

    第三人

    第三人


我当前代码的功能:

阅读每一条信息

检查ArrayList中的名称是否正确

如果是,则跳过。如果不是,则添加到数组中

将ArrayList放入ListView


我的意图是:

仅读取以下内容的代码:

第一人

第二人


第三个人

试着在投影中只使用“地址”(也就是说,甚至不包括“\u id”)-我不确定这一点,但它可能会解决这个问题。

这只是一个查询,需要在该查询中获取sms。我需要一个类似
UNIQUE
DISTINCT
的查询。你知道怎么做吗?谢谢。对不起,我不明白。只要你使用
ContentProviderUNIQUE
DISTINCT
ode>(您可以直接打开db文件,但这将是一个肮脏的攻击,因为无法保证它在所有设备上都有相同的路径)。你能澄清一下你愿意实施的方案吗?我们很有可能想出一种不使用
UNIQUE
的方法。我在第一篇文章中编辑并解释了我的意图。希望你明白我的意思。提前感谢你的帮助!非常感谢。(:等一下,我现在有很多事情要做,我稍后会回来看看。@IvanBartsov我已经等了一年多了Ivan!