① android里面onKeyDown的用法,难道不用类的吗
在Android系统中,键盘按键事件keyDown是由WindowManagerService服务来管理的,然后再以消息的形式来分发给应用程序处理,不过和普通消息不一样,它是由硬件中断触发的;在系统启动的时候,SystemServer会启动窗口管理服务WindowManagerService,WindowManagerService在启动的时候就会通过系统输入管理器InputManager来总负责监控键盘消息。这些键盘消息一般都是分发给当前激活的Activity窗口来处理的,因此,当前激活的Activity窗口在创建的时候,会到WindowManagerService中去注册一个接收键盘消息的通道,表明它要处理键盘消息,而当InputManager监控到有键盘消息时,就会分给给它处理。当当前激活的Activity窗口不再处于激活状态时,它也会到WindowManagerService中去反注册之前的键盘消息接收通道,这样,InputManager就不会再把键盘消息分发给它来处理。
1、 onKeyDown事件
Android系统最先触发按键上绑定的事件监听器,然后才触发该组件提供的事件回调方法,最后传播到该组件所在的Activity
2、Touch 事件传递
android系统中的每个View的子类都具有下面三个和TouchEvent处理密切相关的方法:
public booleandispatchTouchEvent(MotionEventev)这个方法用来分发
TouchEventpublic booleanonInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent
public booleanonTouchEvent(MotionEventev)这个方法用来处理TouchEvent
当有ACTION_DOWN事件时,处理流程为:
再回过头来看onKeyDown事件,其实也和touch事件的处理流程一样。
Activity获取到keydown事件 ------>分发给子View MyButton ------> 调用子View 的监听器方法------> 调用子 View 的onKeyDown方法 ------> 调用Activity的onKeyDown方法
② 怎样防止android静态注册的BroadcastReceiver被Root类的安全软件...
应用程序本身可以禁止/启用自身注册的receiver/service/activity等,用pm包就可以,也不需要root,这事你肯定更懂。
-
网络某几个app的做法是一进入应用便重新注册上receiver
-
然而,即便哪一天你想到了更好的防止receiver被反注册的办法,这个时候还有oasisfeng的绿色守护,甚至人家lbe的自启动管理直接劫持掉触发receiver的intent。你还打算怎么办?
-
现在还有一个xposed + xprivacy的组合,能hook住几乎整个系统。
-
使用者本来就有比开发者更高的优先权,以决定启用哪些component。我看不起你的想法。
③ android注册广播有几种方式
注册方式有两种:
1、静态注册,就是在manifest文件里配置一下,这种方式注册的广播属于系统级广播。你的应用没打开也能收到广播。比如你要做一个收到某广播就启动你的应用的功能可以这样搞。
2、动态注册,在代码里执行一个rigisterBroadcastReciver(可能拼写有误)的方法。这种你要自己作好反注册。这种广播可以做成你的应用启动后才监听,关闭后就不监听的效果。