Как получить все текущие SMS-сообщения на телефон, которые были отправлены в течение недели - PullRequest
0 голосов
/ 31 июля 2011

Я подаю заявку, и мне нужно синхронизировать текущие смс-сообщения, полученные / отправленные в течение недели, на мой веб-сервер.Это код, который у меня есть, но он получает все SMS-сообщения:

 SharedPreferences settings = getSharedPreferences("MyPrefs", 0);
    boolean firstTime = settings.getBoolean("FirstTime", true);
    if (firstTime) {
        Uri allMessage = Uri.parse("content://sms/");
        ContentResolver cr = getContentResolver();
        Cursor c = cr.query(allMessage, null, null, null, null);
        while  (c.moveToNext()) {
           String row = c.getString(1);
           //upload it all here
        }
        SharedPreferences.Editor editor = settings.edit();
        editor.putBoolean("FirstTime", false);
        editor.commit();
    }

Другой вопрос, будет ли много проблем, если я отправлю каждое сообщение одно за другим?Должен ли я сгруппировать их вместе, превратить в XML / JSON и кодировать (вероятно, base64), а затем отправить на мой сервер?Но я боюсь, что он может превысить лимит отправки HTTP POST-параметров.

EDIT Я нашел решение, вам нужно использовать то, что запрос возвращает вам, поэтому5-й столбец - это дата для всех сообщений, поэтому вы можете использовать оператор if только для отправки сообщений, которые находятся в пределах 1 недели (604800 секунд).

Uri allMessage = Uri.parse("content://sms/");
        ContentResolver cr = getContentResolver();
        Cursor c = cr.query(allMessage, null, null, null, null);
            while(c.moveToNext()){
                int date = Math.round(Integer.parseInt(c.getString(4))/1000);
                int time_now = Math.round(System.currentTimeMillis()/1000);
                int difference = time_now - date;
                    if(difference < 604800){
                        String phoneNumber = c.getString(2);
                    String message = c.getString(11);
                                    //this sms is within a week old.
                    }


            }

1 Ответ

0 голосов
/ 31 июля 2011

вам нужно использовать критерии выбора для этого ..

Cursor c = cr.query(allMessage, null, "recievedDate between date('now') and SELECT date('now','start of week','-1 week',''); ", null, null);

это создаст SQL-запрос для выборки правильного дня. Возможно, вы захотите немного изменить критерии выбора ..

критерий выбора - это, в основном, условие where в запросе sql, за исключением ключевого слова where.

здесь есть статья о функция даты-времени SQLLite

надеюсь, это поможет.

...