Подтвердить что ты не робот

Реализация библиотеки для отслеживания всех событий в приложении

Я пытаюсь создать библиотеку, позвольте ей позвонить L. Компания имеет приложение для Android, скажем A.

L можно связать с A таким, что в кодах A, разработчику просто нужно добавить что-то вроде:

L l = новый L ( "client_id" ) l.startTrack();

Теперь L должен иметь возможность отслеживать все клики, которые происходят в A, и переходить на сервер для ведения журнала. AppSee - это продукт, который уже делает это.

Мне интересно, как я могу перехватить каждое действие пользователя, чтобы получить целевое имя действия (название кнопки? текстовое поле?)

Спасибо!

4b9b3361

Ответ 1

То, что вы спрашиваете, - EventTracking, например, в GoogleAnalytics. Но подход, который вы делаете, отличается. В аналитике Google нужно запустить событие для отслеживания событий. Например, у вас есть 3 кнопки, и вам нужно отслеживать каждую кнопку отдельно, там вы помещаете 3 отдельных трекера событий.

Если вы хотите отслеживать все события, проходящие через активность, вам необходимо реализовать Activity onInterceptTouchEvent(). Всякий раз, когда событие касания происходит в активности, оно проходит через указанный выше метод.

Как говорит Google

Внедрите этот метод, чтобы перехватить все события движения сенсорного экрана. Это позволяет просматривать события по мере их отправки на ваш детей, и взять на себя ответственность за текущий жест в любой момент.

с осторожностью

Использование этой функции требует некоторой осторожности, поскольку она имеет довольно сложную взаимодействие с View.onTouchEvent(MotionEvent), а использование этого требует реализуя этот метод, а также этот правильный путь.

Подробнее о событиях, смотрите здесь.

Ответ 2

OnClickListener - это интерфейс. поэтому вы можете реализовать его в любом классе

Ответ 3

Это довольно легко. Поскольку каждый элемент управления на экране является подклассом представления, вы можете сделать что-то вроде этого:

public static void logClicksOnMe(View v){
    v.setOnClickListener(new View.OnClickListener{
        @Override
        public void onClick(View v){
           //TODO Log code
        }
    });
}

Очевидно, что это уничтожит слушателей, которые вы уже установили на таком объекте, но вы можете сделать что-то вроде этого:

public static void setLoggedListener(View v, View.OnClickListener listener){
    v.setOnClickListener(new View.OnClickListener{
        @Override
        public void onClick(View v){
           //TODO Log code
           if(listener!=null) listener.onClick(v);
        }
    });
}

Разработчик должен будет установить слушателей вручную, но он уже должен, поэтому ни рабочая нагрузка, ни код не должны сильно меняться. Преимущество над интерфейсом деятельности onInterceptTouchEvent() заключается в том, что вы можете абсолютно контролировать, какой вид будет отслеживаться, и разработчик не будет ограничен использовать абстрактную деятельность (пусть он уже использует другие абстрактные действия от третьих сторон, например, SlidingActivity или вещи как это.), поэтому усилия по обслуживанию и реализации довольно малы.

Ответ 4

Not exactly, actually there is something more easier, you can ask them to inherit there activities from your activity
 eg. A extends L;
Do this in following steps. 

1. Create the library(say L is com.click.counter), with event handles counter like explained in many reply above, using view.onclicklistner. In onclick event, The only difference is use package name. As context is of the app which is calling the library, you can use
Context::getPackageName
http://developer.android.com/reference/android/content/Context.html#getPackageName%28%29

2. onclick events, you may log and sync in one go, at end of day/scheduled time, or on every click. you may use httphandler for that 
See 
https://cloud.google.com/appengine/docs/go/gettingstarted/helloworld?hl=en

2. Create a test apk(A),add the library as dependency in gradle. 
dependencies {
    compile 'com.click.counter'
  }

3. Inherit all the activity in test apk from class A