使用TimerTask延迟发送SMS

时间:2012-09-14 01:16:56

标签: android timer sms delay timertask

我正在开发的代码(android应用程序)接收短信,如果短信来自某个号码,则返回预定义的短信。这一切都很好,但我想添加一个Timer,以便回复看起来很真实。通过一些研究,我提出了下面的代码,试图延迟代码,以便消息在30秒延迟后发送。

我定义了一个名为Timer1的新计时器,一个30秒的延迟和一个名为tt1的TimerTask,然后在onReceive()中,就在我调用sendSMS方法之前,我调用了timer()方法来启动计时器

然而,Timer永远不会停止并且消息永远不会发送。应用程序最终崩溃了几个人可以看到我做错了吗?

    static Timer timer1 = new Timer();
static long delay = 30000;
static TimerTask tt1;

        private BroadcastReceiver intentReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

        //---gather up all the necessary user input---
        prefs = getSharedPreferences(prefName, MODE_PRIVATE);
        String textMessage = (String) prefs.getString(NAME_KEY, "");
        final Button btn2 = (Button)findViewById(R.id.btnContacts);
        String phoneNumber = (String) btn2.getText();
        String Sender = (String) intent.getExtras().getString("Sender");

        if(Sender.equals(phoneNumber))
        {
            timer();
            sendSMS(phoneNumber, textMessage); 
        }
        }
    }
     };

        //---holds the delay for realistic reply time---
public static void timer() 
{
    timer1.schedule(tt1 ,0,delay);      
}




//---sends an SMS message to another device---
public void sendSMS(String phoneNumber, String message)
{       
    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(phoneNumber, null, message, null, null);
}

编辑:我现在正在使用handler.postDelayed暂停发送文本。这样做效果更好

在这里找到的handler.postDelayed的初学者资源很好:http://www.appaholics.in/running-a-task-with-a-delay/

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

 what I am doing wrong?

这是你错的地方

timer1.schedule(tt1 ,0,delay);

上述声明将为每30秒创建一个重复发送SMS操作的时间表。

我认为您只需要向发件人回复一次短信,因此您需要更改代码,如下所示,

timer1.schedule(tt1 ,100);

现在上面的代码将在100毫秒后将短信回复给发件人一次。