Protección contra el spam onclick ()

Estoy tratando de construir una aplicación de SMS que envía un SMS con una prensa en un botón, esta parte está trabajando, pero ahora estoy tratando de implementar una protección contra el spam. La protección contra spam significa que sólo puede enviar 1 SMS por 10 segundos (o superior).

He intentado esto:

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); }}); 

Pero esto no funciona cuando presiono el botón dos veces el SMS también está enviando dos veces.

Tal vez también es una idea para hacer un brindis que contiene cuántos segundos el usuario tiene que esperar, algo así:

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

¿Es todo esto posible hacer?

Es necesario almacenar cuando se hizo clic en el último botón y luego ver si han transcurrido 10 segundos.

 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(); } }}); 

¿por qué no acaba de tomar una marca de tiempo cuando se hizo clic en el botón, a continuación, comparar el momento en que el botón se hizo clic de nuevo y ver si la diferencia es mayor que la cantidad de tiempo asignado?

Potencialmente, lo más fácil de hacer en mi opinión es desactivar el botón y utilizar el controlador incorporado (en el objeto de vista) para volver a activar el botón.

 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); }}); 

si desea mostrar un mensaje de brindis al usuario, notificándole sobre cuántos segundos quedan, debe escribir el código toast.maketext dentro del evento de programación del temporizador también

usar timestamp no será la manera más fácil, sino que hará la tarea más difícil.

También puede intentar desactivar el botón onclick durante diez segundos y volver a habilitarlo después de que expire el período de tiempo.

  • No se pudo encontrar un método onClick (View) en la actividad
  • Método onClick no se llama en Android
  • OnClickListener en pestañas no funciona
  • ¿Por qué se puede hacer clic en un botón cuando hay otro diseño que lo superpone?
  • ¿Diferencia entre el evento OnClick () y OnClickListener?
  • ¿Cómo escribir el método onClick en el viewpager?
  • Botón creado dinámicamente de Android: setOnClickListener no funciona
  • Toast dentro del método onClick en Fragment
  • Evitar que DialogFragment se rechace cuando se hace clic en el botón
  • Listview no se puede hacer clic cuando se puede seleccionar la vista de texto dentro de esa vista de lista
  • ListView expandir animación para elementos sólo funciona después del segundo clic
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.