我正在开发的代码(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/
答案 0 :(得分:0)
使用Handler.postDelayed
代替http://developer.android.com/reference/android/os/Handler.html#postDelayed(java.lang.Runnable,%20long)
答案 1 :(得分:0)
what I am doing wrong?
这是你错的地方
timer1.schedule(tt1 ,0,delay);
上述声明将为每30秒创建一个重复发送SMS操作的时间表。
我认为您只需要向发件人回复一次短信,因此您需要更改代码,如下所示,
timer1.schedule(tt1 ,100);
现在上面的代码将在100毫秒后将短信回复给发件人一次。