我正在尝试创建一个库,让我们称之为L.公司有一个Android应用程序,比如A。
L可以链接到A,这样在A的代码中,dev只需要添加如下内容:
L l = new L(" client_id") l.startTrack();
现在L应该能够跟踪A中发生的所有点击并传递给服务器进行记录。 AppSee已经是这样做的产品。
我想知道如何拦截每个用户操作以获取操作目标名称(按钮标题?textfield?)
谢谢!
答案 0 :(得分:6)
你要问的是EventTracking,就像GoogleAnalytics一样。但你正在做的方法是不同的。在Google解析中,需要将事件启动到事件跟踪器。比如说你有3个按钮,你需要单独跟踪每个按钮,你有3个单独的事件跟踪器。
如果您想跟踪活动中的所有事件,您需要实施活动onInterceptTouchEvent()
。每当活动中发生触摸事件时,它都会通过上述方法。
正如谷歌所说
实施此方法以拦截所有触摸屏动作事件。 这允许您在发送事件时观察事件 孩子们,并随时掌握当前手势的所有权。
小心
使用此功能需要一些注意,因为它有一个相当复杂的 与View.onTouchEvent(MotionEvent)的交互,并使用它需要 以正确的方式实现该方法以及此方法。
有关更多活动详情,请look here。
答案 1 :(得分:0)
OnClickListener是一个接口。所以你可以在任何类中实现它
答案 2 :(得分:0)
这很简单。由于屏幕上的每个控件都是视图的子类,因此您可以执行以下操作:
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或者事物像那样。),所以维护和实施工作都很小。
答案 3 :(得分:0)
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