2015-09-26 21 views
0

因此,我想閱讀所有收件箱郵件並按月分組。android:通過月份獲取所有收件箱短信和羣組

通過下面的代碼,我可以得到所有的消息。我仍然將它與月份分組。

下面是我用來讓所有的短信代碼:

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個月 - 15 SMS

2月或2個月 - 45短信 ...

謝謝。

回答

3

變化_timeStringlongSms類類型:

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; 
} 

你可以用這個簡單的用於打印的短信列表:

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