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; } // } }
相关文章推荐
- Android下实现程序关闭后,监听取消
- Android下实现程序关闭后,监听取消
- android监听WIFI开启与关闭
- Android开启/关闭/监听 飞行模式
- C#WinForm 如何实现屏蔽窗口右上角的关闭操作,点击时不关闭程序
- Android 点击通知栏图标 返回已经运行的程序,而不开启一个新的Activity
- [Android]开启/关闭/监听 飞行模式
- 一个WinForm记事本程序(包含主/下拉/弹出菜单/打开文件/保存文件/打印/页面设置/字体/颜色对话框/剪切版操作等等控件用法以及记事本菜单事件/按键事件的具体代码)
- android设置软键盘搜索键以及监听搜索键点击时发生两次事件的问题解决
- 〖Linux〗以后台方式启动/结束指定程序/命令(不受 exit 或点击窗口关闭按钮等终端退出操作的影响)
- android 事件监听,蓝牙开启与关闭,java_Date日期
- [VBA]Excel操作IE(打开网页、等待网页加载、填写网页控件数据、点击网页按钮、抓取网页数据)
- Android Dialog 点击对话框外部区域不关闭的设置,设置view.
- Android Dialog 点击对话框外部区域不关闭的设置
- 一个WinForm记事本程序(包含主/下拉/弹出菜单/打开文件/保存文件/打印/页面设置/字体/颜色对话框/剪切版操作等等控件用法以及记事本菜单事件/按键事件的具体代码)
- Android 关闭/打开多点触控 (Android中设置不能同时点击2个view的方法)
- android监控程序开启与关闭的代码
- 一个WinForm记事本程序(包含主/下拉/弹出菜单/打开文件/保存文件/打印/页面设置/字体/颜色对话框/剪切版操作等等控件用法以及记事本菜单事件/按键事件的具体代码)
- 一个WinForm记事本程序(包含主/下拉/弹出菜单/打开文件/保存文件/打印/页面设置/字体/颜色对话框/剪切版操作等等控件用法以及记事本菜单事件/按键事件的具体代码)
- 一个WinForm记事本程序(包含主/下拉/弹出菜单/打开文件/保存文件/打印/页面设置/字体/颜色对话框/剪切版操作等等控件用法以及记事本菜单事件/按键事件的具体代码)