0

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

我定义了一个名为 Timer1 的新计时器,延迟 30 秒,并在顶部定义了一个名为 tt1 的 TimerTask,然后在 onReceive() 中,就在我调用 sendSMS 方法之前,我调用了启动计时器的 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/

4

2 回答 2

0

改用Handler.postDelayedhttp://developer.android.com/reference/android/os/Handler.html#postDelayed(java.lang.Runnable,%20long )

于 2012-09-14T01:25:09.213 回答
0
 what I am doing wrong?

这是你错的地方

timer1.schedule(tt1 ,0,delay);

上面的语句会创建一个每隔 30 秒重复发送 SMS 操作的时间表。

我相信你只需要回复一次短信给发件人,所以你需要改变你的代码如下,

timer1.schedule(tt1 ,100);

现在上面的代码将在 100 毫秒后向发送者回复一次短信。

于 2012-09-14T02:34:41.563 回答