android後台監聽
『壹』 Android app後台回到前台時的監聽
在一次項目,有個需求涉及到切後台回到app時,需要調起一個彈窗,以這個需求為例子,跟大家分享下我如何實現的(大牛輕拍 = = )
首先,我們在app初始化時,要注冊activity生命周期的回調,我這邊項目里在BaseApplication初始化時調用()
它需要一個ActivityLifecycleCallbacks類型的參數
這個介面涉及到所有activity生命周期的回調
回歸正題,先初始化ActivityLifecycleCallbacks,
我們現在要做的是後台回前台,所以我們只選擇onActivityStarted和onActivityPaused
我是這么做判斷的,給個foregroundActivityCount去表示當前app有多少個activity處於啟動的狀態,給個Boolean值appInBackground判斷app是否處於後台,每次打開app,當啟動一個activity時,就統計開啟activity的次數,並且調用你所需要的監聽方法;只要在start 和 stop時判斷有所activity都stop了,當當前activity啟動次數為0時,說明app處於後台;
初始化已經完成,接下來就是怎麼調用了。我們去到後台回來時需要操作的activity或者fragment,在初始化時調取BaseApplication裡面剛才設定的方法
在裡面寫下你後台回來時你需要的操作
還有一個缺陷,假如是在指定fragment做監聽怎麼辦?其實都差不多的,fragment在activity里,綁定 了activity的生命周期,假設我們要在指定的fragment才調取這個方法,我們需要在加一層判斷,判斷當前fragment是否可見
這樣,只要你每次從後台回來,都可以監聽到,但如果不在當前fragment的話,就不會調用你設定的方法。
以上,是我剛接觸不久的問題,分享給大家,寫的不好的大家見諒,有問題可以評論或私信我,本人還是實習生,請輕拍= =
『貳』 如何在android 中service後台監聽按鍵,比如監聽音量鍵
為了實現鍵盤的監控,從新開發一個輸入法是不現實的,一般的操作就是在系統的輸入法機制中添加介面回調。我們知道,再應用程序中拿到按鍵的回調一般是監聽onKeyDown的介面,如下所示:publicbooleanonKeyDown(intkeyCode,KeyEventevent)開發者就可以根據回調方法中的參數,keyCode與KeyEvent來判斷具體事件。但是,由於事件的回調機制在其的沙箱中運行,在其他應用中是無法拿到當前應用事件回調的。那麼我們就從上到下,具體的看看事件的傳遞機制。如下圖所示,用戶點擊後,軟鍵盤或物理按鍵的輸入驅動就會產生一個中斷,且向/dev/input/event*中寫入一個相應的信號量。Android操作系統則會循環的讀取其中的事件,再分發給WindowManagerServer。由WindowManagerServer根據事件的來源分發到各個不同的ViewGroup與View中,從而產生不同的OnClick、OnKeyDown和OnTouch等事件。這個時候很自然的想到,黑客們希望做鍵盤監控,一定會向Linux底層增加自定義的事件。這里我們使用的是Linux中的getevent獲得/dev/input/eventX設備匯報的事件,這個命令還會輸出所有event設備的基本信息。包括觸屏、按鍵、耳機插入等等。其基本用法如下:Usage:getevent[-t][-n][-sswitchmask][-S][-v[mask]][-d][-p][-i][-l][-q][-ccount][-r][device]-t:showtimestamps-n:don'tprintnewlines-s:printswitchstatesforgivenbits-S:printallswitchstates-v:verbositymask(errs=1,dev=2,name=4,info=8,vers=16,pos.events=32,props=64)-d:showHIDdescriptor,ifavailable-p:showpossibleevents(errs,dev,name,pos.events)-i:-l:-q:quiet(clearverbositymask)-c:-r:printrateeventsarereceived鍵入getevent後,我們能夠看到設備中的一些列輸入硬體驅動信息,同樣下面會出現很多輸入指令信號,通常情況下,這些信號量都在刷屏,如下圖所示:這些信號量的表示我們無法直接看懂,輸入getevent–l加入Label我們能夠看到一些添加的標簽,如下所示:其實這些Lable已經在其input.h頭文件中定義好,其中type的定義如下:/**Eventtypes*/#defineEV_SYN0x00#defineEV_KEY0x01#defineEV_REL0x02#defineEV_ABS0x03#defineEV_MSC0x04#defineEV_SW0x05#defineEV_LED0x11#defineEV_SND0x12#defineEV_REP0x14#defineEV_FF0x15#defineEV_PWR0x16#defineEV_FF_STATUS0x17#defineEV_MAX0x1f#defineEV_CNT(EV_MAX+1)一般來說,常用的是EV_KEY、EV_REL、EV_ABS、EV_SYN,分別對應鍵盤按鍵、相對坐標、絕對坐標、同步事件。EV_SYN則表示一組完整事件已經完成,需要處理,EV_SYN的code定義事件分發的類型。
『叄』 android怎麼實現後台對按鍵事件的監控
遙控器按鍵事件這個不是在Android源碼的bootable下面ircon.c配置的么。比如:
{ .scancode = 0x0b, .mask = 0xaa0087ee,
.keycode = KEY_UP, .spec = IRCON_KEYCODE_NORMAL | IRCON_KEYCODE_LONGPRESS | IRCON_KEYCODE_MOUSEMD },
遙控器按鍵編號是「 0x0b」,給他的響應是「KEY_UP」,就是方向鍵的下,這個是在源碼里邊配置的。你必須要有遙控器的書名數,知道遙控器每個按鍵的編號,然後對應給他相應的響應才可以。
但是你要操控手機,你的手機必須要能接受遙控器信號,這個也是要硬體支持的,一般的手機貌似都沒有這個。
這個遙控的響應操作是驅動層做的,和應用層沒什麼關系,主要是驅動和硬體的支持。