Я знаю, что это очень старый вопрос, я только что натолкнулся и заметил, что остался без ответа. Поэтому, пожалуйста, не отрицайте меня только из-за этого. Возможно, кому-то понадобится этот ответ.
Все, что вам нужно сделать, это запросить телефонный контент-провайдер (я использовал CallLog.Calls
константы вместо жестко закодированных строк для имен столбцов)
String[] projection = { CallLog.Calls.DATE };
Uri smsContentUri = Uri.parse("content://sms/");
Cursor cursor = this.getContentResolver().query(smsContentUri , selection,where, null, null);
SimpleDateFormat format = new SimpleDateFormat("dd-MM-yy");
cursor.moveToFirst();
Log.d("SMS COUNT", ""+cursor.getCount());
while(cursor.isAfterLast() == false){
Log.d("SMS DATE", ""+cursor.getString(cursor.getColumnIndex(CallLog.Calls.DATE))); //raw format of the date in milliseconds
long callDate = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE));
String dateString = format.format(new Date(callDate));
Log.i("SMS DATE",dateString);
cursor.moveToNext();
}
Для вашего случая все, что вам нужно сделать, - это указать условие where, которое сделает выбор над проекцией. Вам необходимо преобразовать границы дат, которые вы упомянули в миллисекундах (получить дату и преобразовать ее в мс). Убедитесь, что ваш шаблон соответствует "dd-MM-yy"
.
Предложение where должно выглядеть следующим образом:
String where = CallLog.Calls.DATE+"<"+FRIST_BOUND_IN_MS + " AND "+ CallLog.Calls.DATE + "< " + SECOND_BOUND_IN_MS;
, что приводит нас к окончательной форме нашего запроса: SELECT date FROM sms_content WHERE date < 'firstbound' AND date < 'second bound'
Измените Uri smsContentUri = Uri.parse("content://sms/");
, добавив в конец отправленного или входящего сообщения "content://sms/"
, чтобы получить "content://sms/sent"
или "content://sms/inbox"
относительно того, какое поле вы хотите запросить.
Приветствия.