① 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(可能拼寫有誤)的方法。這種你要自己作好反注冊。這種廣播可以做成你的應用啟動後才監聽,關閉後就不監聽的效果。