Detectar todos los eventos táctiles sin sobrepasar a dispatchTouchEvent ()?
Estoy desarrollando la biblioteca de Android que necesita rastrear todos los eventos de toque en la aplicación que lo usa. Por ahora, los usuarios deben reemplazar la actividad dispatchTouchEvent()
de cada actividad en cada una de sus actividades. Como se muestra abajo
@Override public boolean dispatchTouchEvent(MotionEvent event) { MyLib.dispatchTouchEvent(event); return super.dispatchTouchEvent(event); }
Pero Appsee detecta eventos de contacto con Appsee.start(“key”);
On onCreate método integrado en la primera actividad donde se inicia la aplicación. Cómo es esto posible. ¿¿Alguna ayuda??
- Custom onInterceptTouchEvent en ListView
- Ver sólo el registro de MotionEvent.ACTION_DOWN
- Servicio Android Jelly Bean que recibe todos los eventos de toque
- ¿Cómo evitar que ScrollView intercepte eventos de clic / toque de la vista detrás de él?
- Compruebe la dirección que se lanzó en un evento de Movimiento android
- FullScreen ImageSwitcher sin galería en Android
- Android MediaController intercepta todos los demás eventos táctiles
- Limpiar por defecto algunas toallitas con jQuery touchwipe
- DrawerLayout con HorizontalScrollView en el menú de contenido
- Determinar qué vista se está tocando actualmente mientras el usuario mueve el dedo
- Utilice una barra de acción contextual personalizada para la selección de texto de WebView
- Problemas con Gallery.getChildAt (int position)
- Vista ScrollView con niños, cómo interceptar desplazamiento condicional
Responder como esto puede ser útil a otros. Respuesta será útil para la biblioteca que requiere interceptar eventos de toque.
Si no desea anular el método de actividad dispatchTouchEvent () ( Imp en caso de que esté codificando para la biblioteca ), podemos usar la clase Window.Callback. Cree su propia implementación de Window.Callback como código a continuación y, a continuación, establezca como devolver la llamada al objeto Window de su actividad.
Haga lo mismo que en el siguiente fragmento de código para la instancia de contexto de Actividad que obtiene.
//set Window.Callback for getting touch event final Window win = context.getWindow(); final Window.Callback localCallback = win.getCallback(); win.setCallback(new MyWindowCallback(localCallback));
Clase MyWindowCallback será como:
Usted recibirá TouchEvent en dispatchTouchEventMethod () de MyWindowCallback donde puede usar estos como sea necesario.
import android.annotation.SuppressLint; import android.util.Log; import android.view.ActionMode; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.view.accessibility.AccessibilityEvent; public class MyWindowCallback implements Window.Callback{ Window.Callback localCallback; public MyWindowCallback(Window.Callback localCallback) { this.localCallback = localCallback; } @Override public boolean dispatchKeyEvent(KeyEvent event) { return localCallback.dispatchKeyEvent(event); } @SuppressLint("NewApi") @Override public boolean dispatchKeyShortcutEvent(KeyEvent event) { return localCallback.dispatchKeyShortcutEvent(event); } @Override public boolean dispatchTouchEvent(MotionEvent event) { //YOU WILL GET TOUCH EVENTS HERE>> USE AS REQUIRED>> return localCallback.dispatchTouchEvent(event); } @Override public boolean dispatchTrackballEvent(MotionEvent event) { return localCallback.dispatchTrackballEvent(event); } @SuppressLint("NewApi") @Override public boolean dispatchGenericMotionEvent(MotionEvent event) { return localCallback.dispatchGenericMotionEvent(event); } @Override public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { return localCallback.dispatchPopulateAccessibilityEvent(event); } @Override public View onCreatePanelView(int featureId) { return localCallback.onCreatePanelView(featureId); } @Override public boolean onCreatePanelMenu(int featureId, Menu menu) { return localCallback.onCreatePanelMenu(featureId, menu); } @Override public boolean onPreparePanel(int featureId, View view, Menu menu) { boolean ret = localCallback.onPreparePanel(featureId, view, menu); return ret; } @Override public boolean onMenuOpened(int featureId, Menu menu) { return localCallback.onMenuOpened(featureId, menu); } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { return localCallback.onMenuItemSelected(featureId, item); } @Override public void onWindowAttributesChanged(WindowManager.LayoutParams attrs) { localCallback.onWindowAttributesChanged(attrs); } @Override public void onContentChanged() { localCallback.onContentChanged(); } @Override public void onWindowFocusChanged(boolean hasFocus) { Log.d("","ttest onfocus changed called"); localCallback.onWindowFocusChanged(hasFocus); } @Override public void onAttachedToWindow() { localCallback.onAttachedToWindow(); } @Override public void onDetachedFromWindow() { localCallback.onDetachedFromWindow(); } @Override public void onPanelClosed(int featureId, Menu menu) { localCallback.onPanelClosed(featureId, menu); } @Override public boolean onSearchRequested() { return localCallback.onSearchRequested(); } @SuppressLint("NewApi") @Override public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) { return localCallback.onWindowStartingActionMode(callback); } @SuppressLint("NewApi") @Override public void onActionModeStarted(ActionMode mode) { localCallback.onActionModeStarted(mode); } @SuppressLint("NewApi") @Override public void onActionModeFinished(ActionMode mode) { localCallback.onActionModeFinished(mode); } }
- ¿Puedes desarrollar programas para Android en un dispositivo Android de una tableta Android?
- Tratando de enviar mi LogCat a un archivo