在我的应用程序中,我想从设备获取短信/ mms并在listview中显示消息。使用以下代码从设备获取所有短信。
public void readSmsFromDevice() {
preferences = PreferenceManager
.getDefaultSharedPreferences(BackgroundService.this);
final_msg_time = preferences.getLong("msgtime", 0);
Uri uriSMSURI = Uri.parse("content://sms/");
String[] projection = { "address", "body", "date", "type" };
String where = "date" + ">" + final_msg_time;
Cursor cur = getContentResolver().query(uriSMSURI, projection, where,null, "date");
while (cur.moveToNext()) {
if(ProfileFragment.stop)
{
break;
}else{
try {
//
Message mess1=new Message();
try{
String _id = cur.getString(cur.getColumnIndex("_id"));
mess1.setId(_id);
}catch(Exception e)
{
mess1.setId("null");
}
try{
String number = cur.getString(cur.getColumnIndex("address"));
number = number.replaceAll("[\\W]", "");
if (number.trim().length() > 10) {
mess1.setNumber(number.substring(number.length() - 10,
number.length()));
mess1.setAddress(number.substring(number.length() - 10,
number.length()));
} else {
mess1.setNumber(number);
mess1.setAddress(number);
}
}
catch(Exception e){}
mess1.setBody(cur.getString(cur.getColumnIndex("body")));
String type = cur.getString(cur.getColumnIndex("type"));
Long millisecond = Long.parseLong(cur.getString(cur
.getColumnIndex("date")));
String dateString = DateFormat.format("yyyy/MM/dd hh:mm:ss a",
new Date(millisecond)).toString();
mess1.setDate_millis(millisecond);
mess1.setDate(dateString);
mess1.setType(type);
mess1.setmessagetype("sms");
messages.add(mess1);
} catch (Exception e) {}
}
}
cur.close();
}
通过使用这种方法,我从设备获取所有短信。但我的问题是如何区分组消息。在组消息中,一条消息发送了不同的联系号码(发件人)。所以在正常的消息应用程序组消息中显示在单独的列中单个消息显示在单独的列中。所以我的应用程序也必须显示消息应用程序等消息。所以在此游标中如何识别组消息?是否有任何列可用于识别组消息?所以请建议我怎么做taht 。谢谢你......
答案 0 :(得分:0)
线程THREAD_ID列将为您提供同一对话中的所有消息。然后,您可以使用地址列来区分组消息中消息的发件人。 您还应该使用API 19中引入的Telephony类而不是内容解析程序。 https://developer.android.com/reference/android/provider/Telephony.html