私が開発しているコード(Androidアプリケーション)はSMSを受信し、SMSが特定の番号からのものである場合、事前定義されたSMSを返します。これはすべて正常に機能しますが、応答が現実的に見えるようにタイマーを追加したいと思います。少し調べて、メッセージが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/