3

ボタンを 1 回押すだけで SMS を送信する SMS アプリケーションを構築しようとしています。この部分は機能していますが、今はスパム保護を実装しようとしています。スパム保護とは、10 秒 (またはそれ以上) ごとに 1 つの SMS しか送信できないことを意味します。

私はこれを試しました:

sentSMS.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {

       Timer timer = new Timer();

       int seconds = 10000;
       timer.schedule(new TimerTask() {
           public void run() {
               processClick();
           }
       }, seconds);

}});

しかし、ボタンを2回押すと、SMSも2回送信されるため、これは機能しません。

次のように、ユーザーが待機する秒数を含むトーストを作成することも考えられます。

Toast.makeText(getBaseContext(), "Spam protection, wait "+secondstowait,
        Toast.LENGTH_SHORT).show();

これはすべて作ることができますか?

4

4 に答える 4

2

おそらく、私の意見では、ボタンを無効にし、(ビュー オブジェクトの) 組み込みハンドラーを使用してボタンを再度有効にする方が簡単です。

sentSMS.setOnClickListener(new OnClickListener() {
   public void onClick(View v) {
       final View view = v;
       v.setEnabled(false);
       v.postDelayed(new Runnable(){
            public void run(){
                 view.setEnabled(true);
            }
       }, 1000*10);    
}});
于 2013-08-12T13:52:54.723 に答える
2

ボタンが最後にクリックされた時刻を保存してから、10 秒が経過したかどうかを確認する必要があります。

long lastTimeSent = 0; //start at 0


sentSMS.setOnClickListener(new OnClickListener() {
public void onClick(View v) {

   if(System.currentTimeMillis() > lastTimeSent + 10000){ //if at least 10 secs has passed from last click
       processClick();
       lastTimeSent = System.currentTimeMillis(); //last time sent is now current time
   }else{
       Toast.makeText(getBaseContext(), "Spam protection, please wait.",
                        Toast.LENGTH_SHORT).show();
   }
}});
于 2013-08-12T13:51:43.060 に答える