Mi problema es el siguiente, quiero hacer que mientras la pantalla esté pulsada, se haga una cosa, cuando deje de pulsarse se pare de hacer, y al volverla a pulsar continue haciendola.
He conseguido que al pulsar empieze la tarea, y al dejar de pulsar se pare, pero cunado vuelvo a pulsar la pantalla, me salta un error, y la aplicación se detiene, he intentado hacerlo de otra manera, pero entonces al volver a pulsar, la tarea no vuelve a empezar.
¿Alguna idea? El código y el error es el siguiente:
private class onTouchig extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
while (pulsando==true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
runOnUiThread(new Thread() {
public void run() {
RestarNumero();
Vibrar();
SharedPreferences();
Cerrar();
}
});
}
return null;
}
}
//Se ejecutara al tocar la pantalla
@Override
public boolean onTouch(View v, MotionEvent event) {
//comprobamos que boton fue pulsado
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
pulsando=true;
if(Touching.getStatus()!= AsyncTask.Status.RUNNING)
Touching.execute();
return true;
case MotionEvent.ACTION_UP:
pulsando = false;
Touching.cancel(true);
break;
}
}
03-22 16:07:29.616 19264-19264/com.dontstoptouching E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.dontstoptouching, PID: 19264
java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:579)
at android.os.AsyncTask.execute(AsyncTask.java:535)
at com.dontstoptouching.Lvl1.onTouch(Lvl1.java:89)
at android.view.View.dispatchTouchEvent(View.java:7704)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2210)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515)
at android.app.Activity.dispatchTouchEvent(Activity.java:2458)
at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2016)
at android.view.View.dispatchPointerEvent(View.java:7889)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3954)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3833)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3525)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3582)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5612)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5592)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5563)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5692)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:138)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:5050)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
at dalvik.system.NativeStart.main(Native Method)
Según entiendo, dice que la tarea ha sido ejecutada y solo puede ejecutarse una vez, por ello salta el error, pero no se como detenerla o pararla paraque no salte ese error