我是Android开发的新手。我正在做一个简单的应用程序来阅读手机的短信。我知道内容提供者 content://sms 存在很多问题,但是... 编写自定义的对我来说太难了,所以我暂时使用它。
问题:当我查询 content://sms/inbox 时,我会收到所有消息,因此当我尝试在 ListActivity 中列出它们时,我会为他/她拥有的每条消息重复相同的联系人。基本上这是正确的,我理解,但我需要别的东西,一些“更专业”的东西。首先是因为: 1- 如此大的查询在手机上需要很长时间 2- 显然,以这种方式列出所有消息没有任何意义。
最简单的事情是使用 DISTINCT 或......如果不是,但非常糟糕,因为它再次查询所有消息,一个 GROUP BY。问题是:无法识别 GROUP BY,因为正确地,内容提供者背后的内容可能与数据库不同。显然 DISTINCT 被接受,但如果使用它并没有任何区别。在收到查询后,我已经吓坏了 3 天来找到解决方案而没有自己过滤消息。
这是我尝试进行查询的一小段简单的代码: List 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();
我希望有一个人可以帮助我!提前致谢。