我正在尝试计算已发送短信的数量,当邮件超过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倍。
答案 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;
}