我必须在android中实现自动事件跟踪
需要自动收集所有按钮单击和页面浏览的分析数据,但是必须以一种通用的方式来完成,这样我就不必为每次单击再次编写Analytics代码。
示例:我的活动中有2个按钮,每个按钮都有一个点击侦听器。现在,我想调用Analytics.track(String buttonName),这样我就不必在每个单击侦听器中都添加它。跟踪中应传递的数据是“名称”按钮。
一种可能的方法(可能不是最终方法)可以扩展Button
(或View
),然后将分析代码放入该View#performClick()
方法中。
至于buttonName
,它可以是您自定义View类的一个字段,您可以通过编程方式甚至通过XML自定义属性进行设置。
全球实施:
创建一个自定义XML属性:创建一个attrs.xml
在ressource文件夹中命名的文件:
<resources>
<declare-styleable name="tracking">
<attr name="tracking_name" format="string" />
</declare-styleable>
</resources>
创建一个自定义Button
(或View
)类,该类将覆盖performClick()
方法并Analytics.track()
使用从XML自定义属性中获取或通过编程方式设置的字符串进行调用:
public class TrackedClickButton extends Button {
private String mTrackingName;
public TrackedClickButton(Context context) {
super(context);
}
public TrackedClickButton(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public TrackedClickButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
@TargetApi(21)
public TrackedClickButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context, attrs);
}
private void init(Context context, AttributeSet attrs) {
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.tracking);
if (array.hasValue(R.styleable.tracking_name)) {
mTrackingName = array.getString(R.styleable.tracking_name);
}
}
public void setTrackingName(String trackingName) {
this.mTrackingName = trackingName;
}
@Override
public boolean performClick() {
//Make sure the view has an onClickListener that listened the click event,
//so that we don't report click on passive elements
boolean clickHasBeenPerformed = super.performClick();
if(clickHasBeenPerformed && mTrackingName != null) {
Analytics.track(mTrackingName);
}
return clickHasBeenPerformed;
}
}
在要跟踪事件的任何地方使用新类,例如在布局文件中:
<com.heysolutions.dentsply.Activites.MainActivity.TrackedClickButton
xmlns:tracking="http://schemas.android.com/apk/res-auto"
android:id="@+id/button"
android:layout_width="50dp"
android:layout_height="50dp"
tracking:tracking_name="buttonTrackingName"/>
再一次,这是一种方式,可能与您的实施方式相比更容易/更好/更好:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句