实现一个库来跟踪应用程序中的所有事件

我正在试图build立一个图书馆,让我们称之为L.一个公司有一个Android应用程序,说A.

L可以链接到A,这样在代码A中,开发人员只需要添加如下内容:

L l = new L(“client_id”)l.startTrack();

现在L应该能够跟踪A中发生的所有点击并传递给服务器进行日志logging。 AppSee是一个已经在做这个的产品。

我想知道如何拦截每个用户操作来获取操作目标名称(button标题?文本框?)

谢谢!

Solutions Collecting From Web of "实现一个库来跟踪应用程序中的所有事件"

你所要求的是EventTracking,就像在GoogleAnalytics中一样。 但是你正在做的方法是不同的。 在Google分析中,需要向事件跟踪器启动事件。 就像说你有一个3个button,你需要分别跟踪每个button,你有3个单独的事件跟踪器。

如果你想跟踪所有的事件,你需要实现Activity的onInterceptTouchEvent() 。 每当一个活动中发生触摸事件时,它就会经过上述的方法。

正如谷歌所说

实现这个方法来拦截所有的触摸屏幕动作事件。 这使您可以在事件发送给您的孩子时观看事件,并随时掌握当前的手势。

慎用

使用这个函数需要注意,因为它与View.onTouchEvent(MotionEvent)有一个相当复杂的交互,使用它需要以正确的方式来实现这个方法。

欲了解更多活动详情, 请看这里 。

OnClickListener是一个接口。 所以你可以在任何课堂上实施它

这很容易。 由于屏幕上的每个控件都是视图的子类,因此可以这样做:

 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或事物就像那样),所以维护和实现的努力是相当小的。

 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