没有重复的内容联系://短信/收件箱

时间:2013-05-13 11:38:02

标签: android group-by message distinct android-contentprovider

我是Android开发的新手。 我正在做一个简单的应用程序来阅读手机的短信。 我知道内容提供商的内容有多少问题://短信但是......我写一个自定义的内容太难了,所以我暂时会使用它。

问题:当我查询内容时:// sms / inbox我得到了所有消息,所以当我尝试在ListActivity中列出它们时,我对他/她拥有的每条消息重复了相同的联系。基本上这是正确的,我理解它,但我需要别的东西,“更专业”的东西。 首先是因为: 1-一个如此大的查询需要很长时间在手机上 2-显然它没有任何意义,所有的消息都以这种方式列出。

最简单的事情是使用DISTINCT或......如果没有,但非常糟糕,因为它再次查询所有消息,即GROUP BY。问题是:GROUP BY无法识别,因为正确地说,内容提供商背后的内容可能与数据库有所不同。显然DISTINCT已被接受但如果使用则不会有任何差异。 在获得查询后,我一直疯狂地寻找解决方案而没有自己过滤消息。

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

       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();

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

1 个答案:

答案 0 :(得分:0)

您必须使用GROUP BY thread_id,查看我的github存储库SmsMessenger中的更多详细信息,您可以通过以下查询获取它:

    cursor = MyApplication.getContext().getContentResolver().query(Uri.parse("content://sms")
            , null
            , "address IS NOT NULL) GROUP BY (thread_id"
            , null
            , null);