首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >内容无重复联系://sms/inbox

内容无重复联系://sms/inbox
EN

Stack Overflow用户
提问于 2013-05-13 19:38:02
回答 1查看 851关注 0票数 2

我是Android开发的新手。我正在做一个简单的应用程序来读取手机的文本消息。我知道围绕内容提供商content://sms有很多问题,但是...对我来说,编写一个自定义代码太难了,所以我暂时还是用它吧。

问题:当我查询content://sms/inbox时,我得到了所有的消息,所以当我试图在ListActivity中列出它们时,我得到的每条消息都有相同的联系人。基本上这是正确的,我理解它,但我需要一些其他的东西,一些“更专业”的东西。首先是因为: 1-这么大的查询在手机上需要很长时间2-显然它不会让任何感觉都以这种方式列出所有的消息。

最简单的方法就是使用DISTINCT或者...如果没有,但很糟糕,因为它再次查询所有的消息,一个GROUP BY。问题是: GROUP BY无法识别,因为正确地说,内容提供者背后的内容可能与DB不同。显然DISTINCT是被接受的,但如果使用它,它不会有任何区别。我已经抓狂了3天,在得到消息的查询后,我没有自己过滤消息就找到了解决方案。

这是我尝试执行查询的一小段简单代码: List smsList = new ArrayList();

代码语言:javascript
运行
复制
       Uri uri = Uri.parse("content://sms/inbox");
       String order = new String("date DESC");
       String[] projection = new String[]{"DISTINCT thread_id, address, body, _id"};
       String selection = new String("GROUP BY address"); //this doesn't work
       Cursor c = getContentResolver().query(uri, projection, null, null, order);

       // Read the sms data and store it in the list
       if(c.moveToFirst()) {
           for( i=0; i < c.getCount(); i++) {
               SMSData sms = new SMSData();
               sms.setBody(c.getString(c.getColumnIndexOrThrow("body")).toString());
               sms.setNumber(c.getString(c.getColumnIndexOrThrow("address")).toString());
               sms.setId(c.getString(c.getColumnIndexOrThrow("_id")).toString());
               sms.setPersonName(getContactNameFromNumber(sms.getNumber()));
               smsList.add(sms);
               //Log.v(TAG,"il nome è: "+smsList.get(i).getPersonName()+" e il numero è: "+smsList.get(i).getNumber());
               c.moveToNext();
           }
       }

       c.close();

我希望有人能帮助我!提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-11-30 23:55:38

你必须使用GROUP BY thread_id,在我的github仓库SmsMessenger中查看更多详细信息,你可以通过以下查询获得它:

代码语言:javascript
运行
复制
    cursor = MyApplication.getContext().getContentResolver().query(Uri.parse("content://sms")
            , null
            , "address IS NOT NULL) GROUP BY (thread_id"
            , null
            , null);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16521107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档