Как получить количество отправленных SMS-сообщений между конкретными датами в Android - PullRequest
0 голосов
/ 16 ноября 2010

Есть ли способ узнать количество отправленных SMS-сообщений между конкретными датами в Android?

Я бы предпочел официально поддерживаемую функциональность SDK, и в вашем ответе было бы полезно указать, является ли это частью официального SDK.

Мне известно о этом вопросе переполнения стека, но он использует не официально поддерживаемые android.provider.Telephony.SMS_RECEIVED и content://sms/sent, поэтому я бы не стал его использовать (пожалуйста, исправьте меня, если я ошибаюсь об этом не поддерживается).

1 Ответ

7 голосов
/ 07 октября 2011

Я знаю, что это очень старый вопрос, я только что натолкнулся и заметил, что остался без ответа. Поэтому, пожалуйста, не отрицайте меня только из-за этого. Возможно, кому-то понадобится этот ответ.

Все, что вам нужно сделать, это запросить телефонный контент-провайдер (я использовал 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" относительно того, какое поле вы хотите запросить. Приветствия.

...