2011-12-27 123 views
2

我试图计算发送的SMS消息的数量,并且当消息超过1条消息的限制时,将它们计为2(或更多)。获取已发送的SMS消息的数量

Uri allMessages = Uri.parse("content://sms/sent"); 
Cursor c = getContentResolver().query(allMessages, null, null, null, null); 
int totalMessages = 0; 


while (c.getPosition() < numberRows - 1) 
{ 
    c.moveToNext(); 

    //Problem Code 
    String messageBody = c.getString(c.getColumnIndex("body")); 
    long messageLength = messageBody.length(); 
    double numberOfMessages = messageLength/160; 
    double numberOfMessagesRoundedUp = Math.ceil(numberOfMessages); 
    //Problem Code 


    totalMessages = (int) (totalMessages + numberOfMessagesRoundedUp); 
} 

c.close(); 

除了上面标记的4行代码,代码工作正常。我试图读取每个文本的正文并获取长度,然后除以160(SMS限制)并凑到最近的整数,给我使用的消息数量。该代码给出的值太小,大约比应该少50倍。

+0

有没有错误? – jagsler 2011-12-27 13:23:02

+0

不,它运行良好,并且我没有试图将更长的消息计为2或更多。 – 2011-12-27 13:27:52

+0

将160改为160.0。看到我的代码如下。 – jagsler 2011-12-27 13:48:34

回答

1

更改替换while循环160 TOT 160.0拿到点背后的价值,否则它会返回像一个整数。

您也可以使用以下方式更改while循环。

while (c.moveToNext()) 
{ 
    String messageBody = c.getString(c.getColumnIndex("body")); 
    long messageLength = messageBody.length(); 
    double numberOfMessages = messageLength/160.0; 
    double numberOfMessagesRoundedUp = Math.ceil(numberOfMessages); 

    totalMessages = (int) (totalMessages + numberOfMessagesRoundedUp); 
} 
+0

谢谢,这工作。愚蠢的错误! – 2011-12-27 14:07:57

0

尝试了这一点......下面

while (c.moveToNext();) 
{ 

String messageBody = c.getString(c.getColumnIndex("body")); 
long messageLength = messageBody.length(); 
int numberOfMessages =(int)(messageLength/160); 
totalMessages += numberOfMessages+1; 

} 
2

虽然单个SMS最多为160个字符,但使用多个SMS发送的邮件只能在邮件中放置153个字符。 (另一个字符用于指定“这是短信号x在这种多部分消息的Y”)所以,在伪代码:

if (numCharsThisMessage <= 160) numSMSthisMessage = 1; 
else numSMSthisMessage = 1 + (numChars-1)/153; // -1 because 0-153 is message 1, 154-307 is next ... 

totalSMSsent += numSMSthisMessage; 

希望有所帮助。

+0

有趣,有道理,但你能提供一个来源?我想在更新我的应用之前查看此信息!谢谢。 – 2012-04-24 11:02:33

+2

好吧,我通过观看我的手机(HTC渴望)如何确定给定大小的消息需要多少SMS来解决问题。怕我没有正式的参考资料,模仿手机做什么似乎是明智的! – 2012-05-10 18:28:45