您的位置:首页 > 移动开发 > Android开发

Android程序中设置操作埋点,监听网页开启关闭,控件点击

2017-07-27 15:57 661 查看
在基类BaseActivity中设置

//页面开启广播ACTION
public static final String ACTIVITY_START = "com.showsoft.haha.activity.start";
//页面关闭广播ACTION
public static final String ACTIVITY_STOP = "com.showsoft.haha.activity.stop";
//控件点击事件广播ACTION
public static final String VIEW_CLICK = "com.showsoft.haha.view.click";


public abstract class BaseActivity extends FragmentActivity {
public abstract void initUI();
public abstract void initValue();
private BuryingPointReceiver mBuryingPointReceiver;
private LocalBroadcastManager localBroadcastManager;

@Override
public Resources getResources() {
Resources res = super.getResources();
Configuration config=new Configuration();
config.setToDefaults();
res.updateConfiguration(config,res.getDisplayMetrics() );
return res;
}

@Override
protected void onResume() {
super.onResume();
//MobclickAgent.onPageStart("BaseActivity");
MobclickAgent.onResume(this);
}

@Override
protected void onPause() {
super.onPause();
//MobclickAgent.onPageEnd("BaseActivity");
MobclickAgent.onPause(this);
}

//activity关闭的埋点,发送页面关闭的本地广播
@Override
protected void onStop() {
super.onStop();
L.i("wanlijun","BaseActivity:onStop");
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
Intent intent = new Intent(Sp.ACTIVITY_STOP);
intent.putExtra(Sp.ACTIVITY_STOP,getComponentName().getClassName());
localBroadcastManager.sendBroadcast(intent);
}

//activity开启的埋点,发送页面开启的广播
@Override
protected void onStart() {
super.onStart();
L.i("wanlijun","BaseActivity:onStart");
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
Intent intent = new Intent(Sp.ACTIVITY_START);
intent.putExtra(Sp.ACTIVITY_START,getComponentName().getClassName());
localBroadcastManager.sendBroadcast(intent);
}

@Override
protected void onDestroy() {
super.onDestroy();
L.i("wanlijun","BaseActivity:onDestroy");
}

//注册广播接收器,一旦注册了,后续所有继承基类BaseActivity的页面都可以接受广播了

//注意:注册的本地广播一定要用
localBroadcastManager.registerReceiver(mBuryingPointReceiver,intentFilter);
不能只用
registerReceiver(mBuryingPointReceiver,intentFilter);
否则注册不成功 public void registerBuryingPointReceiver(){ IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Sp.ACTIVITY_START); intentFilter.addAction(Sp.ACTIVITY_STOP); intentFilter.addAction(Sp.VIEW_CLICK); mBuryingPointReceiver = new BuryingPointReceiver(); localBroadcastManager = LocalBroadcastManager.getInstance(this); localBroadcastManager.registerReceiver(mBuryingPointReceiver,intentFilter); }//注销广播接收器 public void unregisterBuryingPointReceiver(){ localBroadcastManager = LocalBroadcastManager.getInstance(this); localBroadcastManager.unregisterReceiver(mBuryingPointReceiver); } //控件点击事件 @Override public boolean dispatchTouchEvent(MotionEvent ev) { if(ev.getAction() == MotionEvent.ACTION_UP){ LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this); Intent intent = new Intent(Sp.VIEW_CLICK); intent.putExtra(Sp.VIEW_CLICK,ev); localBroadcastManager.sendBroadcast(intent); } return super.dispatchTouchEvent(ev); } //操作埋点广播接收器 public class BuryingPointReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving String action = intent.getAction(); L.i("wanlijun","action="+action);
if(action.equals(Sp.ACTIVITY_START)) {
String componentName = intent.getStringExtra(Sp.ACTIVITY_START);
L.i("wanlijun",componentName+"页面开启了");

}else if(action.equals(Sp.ACTIVITY_STOP)) {
String componentName = intent.getStringExtra(Sp.ACTIVITY_STOP);
L.i("wanlijun",componentName+"页面关闭了");
}else if(action.equals(Sp.VIEW_CLICK)) {
L.i("wanlijun","控件点击");
MotionEvent motionEvent = intent.getParcelableExtra(Sp.VIEW_CLICK);
View view = searchClickedView(getWindow().getDecorView(),motionEvent);
if(view instanceof TextView){
L.i("wanlijun",((TextView) view).getText().toString() + view.getId());
}
}
}
//递归遍历Activity中所有的view,找出被点击的view
private View searchClickedView(View view,MotionEvent event){
View clickedView = null;
if(isInView(view,event) && view.getVisibility() == View.VISIBLE){
if(view instanceof ViewGroup){
ViewGroup viewGroup = (ViewGroup)view;
for(int i = viewGroup.getChildCount() - 1; i >= 0; i--){
View view1 = viewGroup.getChildAt(i);
clickedView = searchClickedView(view1,event);
if(clickedView != null){
return clickedView;
}
}
}
clickedView = view;
}
return clickedView;
}

//点击的位置是否在View内
private boolean isInView(View view,MotionEvent event){
int clickX = (int)event.getRawX();
int clickY = (int)event.getRawY();
int[] location = new int[2];
view.getLocationOnScreen(location);
int X = location[0];
int Y = location[1];
int width = view.getWidth();
int height = view.getHeight();
if(clickX < X || clickX > X + width ||clickY < Y || clickY > Y + height){
return false;
}
return true;
}
// }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐