所以,我想逐月阅读所有收件箱邮件。
使用以下代码,我可以获取所有消息。我将继续将其与月份分组。
以下是我用于获取所有短信的代码:
public List<Sms> getAllSms() {
List<Sms> lstSms = new ArrayList<Sms>();
Sms objSms = new Sms();
Uri message = Uri.parse("content://sms/");
ContentResolver cr = getContentResolver();
Cursor c = cr.query(message, null, null, null, null);
startManagingCursor(c);
int totalSMS = c.getCount();
if (c.moveToFirst()) {
for (int i = 0; i < totalSMS; i++) {
objSms = new Sms();
objSms.setId(c.getString(c.getColumnIndexOrThrow("_id")));
objSms.setAddress(c.getString(c
.getColumnIndexOrThrow("address")));
objSms.setMsg(c.getString(c.getColumnIndexOrThrow("body")));
objSms.setReadState(c.getString(c.getColumnIndex("read")));
objSms.setTime(c.getString(c.getColumnIndexOrThrow("date")));
if (c.getString(c.getColumnIndexOrThrow("type")).contains("1")) {
objSms.setFolderName("inbox");
} else {
objSms.setFolderName("sent");
}
lstSms.add(objSms);
c.moveToNext();
}
}
// else {
// throw new RuntimeException("You have no SMS");
// }
c.close();
return lstSms;
}
短信类:
public class Sms {
private String _id;
private String _address;
private String _msg;
private String _readState; //"0" for have not read sms and "1" for have read sms
private String _time;
private String _folderName;
public String getId() {
return _id;
}
public String getAddress() {
return _address;
}
public String getMsg() {
return _msg;
}
public String getReadState() {
return _readState;
}
public String getTime() {
return _time;
}
public String getFolderName() {
return _folderName;
}
public void setId(String id) {
_id = id;
}
public void setAddress(String address) {
_address = address;
}
public void setMsg(String msg) {
_msg = msg;
}
public void setReadState(String readState) {
_readState = readState;
}
public void setTime(String time) {
_time = time;
}
public void setFolderName(String folderName) {
_folderName = folderName;
}
@Override
public String toString() {
return "Sms{" +
"_id='" + _id + '\'' +
", _address='" + _address + '\'' +
", _msg='" + _msg + '\'' +
", _readState='" + _readState + '\'' +
", _time='" + _time + '\'' +
", _folderName='" + _folderName + '\'' +
'}';
}
}
我想要,
1月或1月 - 15个短信
2月或2月 - 45短信 ...
感谢。
答案 0 :(得分:3)
在_time
课程中将String
的类型从long
更改为Sms
:
public class Sms {
private String _id;
private String _address;
private String _msg;
private String _readState; //"0" for have not read sms and "1" for have read sms
private long _time;
private String _folderName;
public String getId() {
return _id;
}
public String getAddress() {
return _address;
}
public String getMsg() {
return _msg;
}
public String getReadState() {
return _readState;
}
public long getTime() {
return _time;
}
public String getFolderName() {
return _folderName;
}
public void setId(String id) {
_id = id;
}
public void setAddress(String address) {
_address = address;
}
public void setMsg(String msg) {
_msg = msg;
}
public void setReadState(String readState) {
_readState = readState;
}
public void setTime(long time) {
_time = time;
}
public void setFolderName(String folderName) {
_folderName = folderName;
}
@Override
public String toString() {
return "Sms{" +
"_id='" + _id + '\'' +
", _address='" + _address + '\'' +
", _msg='" + _msg + '\'' +
", _readState='" + _readState + '\'' +
", _time='" + _time + '\'' +
", _folderName='" + _folderName + '\'' +
'}';
}
}
然后更改您的getAllSms()
方法:
public Map<Integer, List<Sms>> getAllSms() {
Map<Integer, List<Sms>> smsMap = new TreeMap<Integer, List<Sms>>();
Sms objSms = null;
Uri message = Uri.parse("content://sms/");
ContentResolver cr = getContentResolver();
Calendar cal = Calendar.getInstance(Locale.ENGLISH);
Cursor c = cr.query(message, null, null, null, null);
startManagingCursor(c);
int totalSMS = c.getCount();
if (c.moveToFirst()) {
for (int i = 0; i < totalSMS; i++) {
objSms = new Sms();
objSms.setId(c.getString(c.getColumnIndexOrThrow("_id")));
objSms.setAddress(c.getString(c.getColumnIndexOrThrow("address")));
objSms.setMsg(c.getString(c.getColumnIndexOrThrow("body")));
objSms.setReadState(c.getString(c.getColumnIndex("read")));
objSms.setTime(c.getLong(c.getColumnIndexOrThrow("date")));
if (c.getString(c.getColumnIndexOrThrow("type")).contains("1")) {
objSms.setFolderName("inbox");
} else {
objSms.setFolderName("sent");
}
cal.setTimeInMillis(objSms.getTime());
int month = cal.get(Calendar.MONTH);
if (!smsMap.containsKey(month))
smsMap.put(month, new ArrayList<Sms>());
smsMap.get(month).add(objSms);
c.moveToNext();
}
}
// else {
// throw new RuntimeException("You have no SMS");
// }
c.close();
return smsMap;
}
您可以使用以下简单打印SMS列表:
Map<Integer, List<Sms>> smsMap = getAllSms();
for (Map.Entry<Integer, List<Sms>> entry : smsMap.entrySet()) {
Log.d("sms_sample", String.format("Month %d: %d sms", entry.getKey(), entry.getValue().size()));
}
请注意,月份从0开始(1月= 0,2月= 1 ......),如Calendar documentation
中所述