Android getOnTouchListener con la versión del API> = 15

Necesito saber si se ha establecido un OnTouchListener en una vista. El siguiente código funciona bien por debajo del nivel de api 15.

public static boolean isSetOnTouchListener_v8(View v) { try { Class<View> clazz = (Class<View>) Class.forName("android.view.View"); Field f = clazz.getDeclaredField("mOnTouchListener"); f.setAccessible(true); if (f.get(v) == null) { return false; } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return true; } 

Ahora necesito el mismo método para api nivel 15 y superior.

He intentado el siguiente código, pero no funciona. ¿Alguien tiene alguna sugerencia?

 public static boolean isSetOnTouchListener_v15(View v) { try { Object listenerInfo = getListenerInfo(v); if (listenerInfo != null) { Class<? extends Object> clazz = listenerInfo.getClass(); Field f = clazz.getDeclaredField("mOnTouchListener"); f.setAccessible(true); if (f.get(listenerInfo) == null) return false; } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } return true; } private static Object getListenerInfo(View v) { Field f = null; try { f = View.class.getDeclaredField("mListenerInfo"); f.setAccessible(true); return (Object) f.get(v); } catch (Exception e) { return null; } } 

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.