Android Broken SMS发送代码

时间:2012-02-16 03:51:12

标签: android sms

好的,所以我正在创建一个Android应用程序,能够多次发送短信息,并发送消息量之间的间隔。这部分有效,但有时却没有。例如,当我输入20个msgs发送时,它发送16或者更多一点。此外,当我按下按钮时,它会冻结,直到它完成发送SMS的信息。无论如何有人可以告诉我我的代码有什么问题?我已经尝试了一些不能很好地工作的修复程序,并且认为我会在许多失败的尝试之后来这里寻求帮助。 PS那么有更多的代码,但这是问题所在的地方我相信。谢谢阅读 编辑:固定!

1 个答案:

答案 0 :(得分:1)

该按钮处于“冻结”状态,因为UI线程在释放其他内容之前正在发送所有20条短信。

我会调查AsyncTask。这是Android轻松推送的方式。基本上你会用AsyncTask在后台生成一个新线程。这释放了UI线程,使其看起来像用户的一切正常(没有冻结),而AsyncTask正在使用doInBackground在后​​台完成所有工作。然后,当任务完成时,使用onPostExecute通知UI它已完成并可能告诉用户一些东西。您将调用MyAsyncTask.execute(smsDataHere)置于onClick。

AsyncTask的链接相当全面,仅用于简单目的,并提供示例代码。

我不确定完全为什么它只发送16条左右的消息,但是我可以直接看到你错过了一些花括号,而且它们并不完全匹配你希望他们的方式。我先看看那里。另外,第二个for循环是否有原因? size始终为1,因此它只是发送两次消息。

修改 这是一些示例代码。我不会保证它适用于您的确切应用程序,但它会告诉您AsyncTask如何工作并为您提供一个起点。我也尝试用花括号修复任何问题并做了一点清理。我仍然建议查看文档以确保您了解它的工作原理。我希望这会对你有所帮助。

public void onClick(View v){                
    String phoneNo = putpn.getText().toString();
    String message = txtMessage.getText().toString();
    String txts = txtAmount.getText().toString();
    String inter = interval.getText().toString();

    if (msgCount > 21){
        Toast.makeText(getBaseContext(), "That is too many txts, the max is 20", Toast.LENGTH_SHORT).show();
    }
    else{
        MySmsTask.execute(phoneNo, message, txts, inter);
    }
}

private class MySmsTask extends AsyncTask<String, Void, Integer> {
    @Override
    protected Integer doInBackground(String... messageData) {
        int sentCount = 0;
        int size = 1;
        int delay = Integer.parseInt(messageData[3]);
        int msgCount = Integer.parseInt(messageData[2]);

        if (phoneNo.length()>0 && message.length()>0){
            for (sentCount = 0; sentCount < msgCount; sentCount++) {
                for (int i = 0; i < size; i++) {
                    sendSMS(messageData[0], messageData[1]);
                    Thread.sleep(delay * 1000);
                }
            }
        }
        return sentCount;
    }

    @Override
    protected void onPostExecute(Integer result) {
        Toast.makeText(getBaseContext(), "Sent " + sentCount + " messages", Toast.LENGTH_SHORT).show();
    }
}

private void sendSMS(String phoneNumber, String message){        
    PendingIntent pi = PendingIntent.getActivity(this, 0,
            new Intent(this, Object.class), 0);
    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(phoneNumber, null, message, null, null);
}