Android 获取已发送SMS消息数的计数

Android 获取已发送SMS消息数的计数,android,sqlite,Android,Sqlite,我正在尝试计算发送的SMS消息的数量,当消息超过1条消息的限制时,将它们计为2条(或更多) uriallmessages=Uri.parse(“content://sms/sent"); 游标c=getContentResolver().query(所有消息,null,null,null,null); int totalMessages=0; while(c.getPosition()

我正在尝试计算发送的SMS消息的数量,当消息超过1条消息的限制时,将它们计为2条(或更多)

uriallmessages=Uri.parse(“content://sms/sent");
游标c=getContentResolver().query(所有消息,null,null,null,null);
int totalMessages=0;
while(c.getPosition()

除了上面标记的4行之外,代码工作正常。我试图读取每条文本的正文并获得长度,然后除以160(短信限制)并四舍五入到最接近的整数,给出使用的消息数。代码给出的值太小,大约比应该的值小50倍。

试试这个。。。将while循环替换为以下内容

while (c.moveToNext();) 
{

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

}

将160改为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);
}

虽然单个SMS最多可包含160个字符,但使用多个SMS发送的消息在一条消息中只能包含153个字符。(其他字符用于指定“这是此多部分消息中的sms号码x/y”。)因此,在psuedo代码中:

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

 totalSMSsent += numSMSthisMessage;

if(numCharsThisMessage否,它运行良好,在我不尝试将较长的消息计算为2条或更多的情况下工作。将160更改为160.0。请参阅下面的代码。很有趣,很有意义,但您能提供一个源代码吗?我想在更新我的应用程序之前检查一下这一点!谢谢。我是通过查看我的手机(HTC desire)来解决的确定了一条给定大小的短信需要多少条短信。恐怕我没有正式的参考资料,模仿手机的功能似乎是明智的!
 if (numCharsThisMessage <= 160) numSMSthisMessage = 1;
 else numSMSthisMessage = 1 + (numChars-1)/153; // -1 because 0-153 is message 1, 154-307 is next ...

 totalSMSsent += numSMSthisMessage;