获取已发送SMS消息的数量

时间:2011-12-27 13:08:35

标签: android sqlite

我正在尝试计算已发送短信的数量,当邮件超过1封邮件的限制时,请将其计为2(或更多)。

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倍。

3 个答案:

答案 0 :(得分:2)

虽然单个短信最多为160个字符,但使用多个短信发送的短信只能在邮件中放入153个字符。 (其他字符用于指定'这是多部分消息中的这是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;

希望有所帮助。

答案 1 :(得分:1)

更改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);
}

答案 2 :(得分:0)

试试这个......用下面的

替换你的while循环
while (c.moveToNext();) 
{

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

}