我正在制作一个应用程序,我需要将一周内收到/发送的当前短信同步到我的网络服务器。这是我的代码,但它获取所有短信:
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.
}
}
答案 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
子句。
希望这会有所帮助。