如何获取手机上一周内发送的所有当前短信

时间:2011-07-30 23:31:49

标签: java android post sms limit

我正在制作一个应用程序,我需要将一周内收到/发送的当前短信同步到我的网络服务器。这是我的代码,但它获取所有短信:

 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 params的发送限制。

修改的 我已经找到了解决方案,您需要使用查询返回的内容,因此第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 :(得分:0)

您需要使用此选择标准..

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

这会创建一个SQL查询来获取正确的daya ..你可能想稍微调整选择标准..

除了where关键字之外,选择标准基本上是SQL查询中的where子句。

这是关于SQLLite datetime function

的文章

希望这会有所帮助。