【问题标题】:Force app to wait to send a new text message强制应用等待发送新短信
【发布时间】:2012-03-14 07:40:12
【问题描述】:

我正在尝试制作一个非常简单的应用程序。我想做的是有一个可以向一个或多个收件人发送多个文本的应用程序。我已经完成了这个,但它似乎没有发送完整数量的文本。

我认为问题在于文本被快速发送。我试图让程序等待一秒钟,但是当我输入“Thread.sleep(1000);”时我收到一条错误消息,提示 Eclipse 中存在未处理的异常。有没有解决的办法?我真的需要为这几行代码做一个 try/catch 吗?如果我确实需要 try/catch,为这个应用编写它的最佳方式是什么?

另外,作为说明,我允许在以后的版本中自定义睡眠时间,所以请在回复时记住这一点。

Integer i = 0;
while (i < numTextSend)
{
        sms.sendTextMessage(number, null, message, null, null);
        Thread.sleep(1000);
            i++;
}

[编辑] 更新代码:

final Button confirm = (Button) findViewById(R.id.confirm);
confirm.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
        //Grab values from UI
            String number = String.valueOf(mNumber.getText().toString());
            Integer numTextSend = Integer.parseInt(mNumTextSend.getText().toString());
            String message = String.valueOf(mMessage.getText().toString());

            //Send SMS message(s)
            SmsManager sms = SmsManager.getDefault();
            Integer i = 0;
            while (i < numTextSend)
            {
                sms.sendTextMessage(number, null, message, null, null);
                //Make App wait 1 second
                i++;
            }
       }
 });

【问题讨论】:

    标签: java android exception sleep wait


    【解决方案1】:

    您可以使用 handlerpostDelayed() 延迟执行任何任务

    示例代码

        Handler h = new Handler();
        Runnable r = new Runnable() {
    
            @Override
            public void run() {
                // TODO Auto-generated method stub
                SmsManager sms = SmsManager.getDefault();
                Handler h = new Handler();
    Runnable r = new Runnable() {
    
        @Override
        public void run() {
            // TODO Auto-generated method stub
            SmsManager sms = SmsManager.getDefault();
            sms.sendTextMessage(null, null, null, null,
                    null);
        }
    };
    h.postDelayed(r, 1000);
    
        }
    };
    

    【讨论】:

    • 感谢您的回复,我只是不确定如何在我的代码中实现这一点。我用更多代码更新了我的问题。
    • 是'h.postDelayed(r, 1000);'应该在那里两次?
    • 好的。我觉得这看起来有点奇怪。感谢您的帮助!
    【解决方案2】:

    根据 javaDoc sleep 方法会抛出 InterruptedException,因此理想情况下您需要用 try/catch 块包围它。

    对于自定义 SleepTime,您始终可以在某个类 (AppConstants.java) 中声明它,或者始终保留在 strings.xml 中并从那里读取它。

    希望这会有所帮助。

    【讨论】:

    • 如果我使用 try catch,考虑到我上面的代码,你认为最好的写法是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多