0

私が開発しているコード(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/

4

2 に答える 2

0

Handler.postDelayed代わりにhttp://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);

上記のステートメントは、SMSの送信操作を繰り返すために30秒ごとにスケジュールを作成します。

SMSを送信者に返信する必要があるのは1回だけだと思います。そのため、次のようにコードを変更する必要があります。

timer1.schedule(tt1 ,100);

上記のコードは、100ミリ秒後に1回だけSMSを送信者に返信します。

于 2012-09-14T02:34:41.563 に答える