2012-04-21 269 views
14

對於這個問題我要引用誰得到了他們的問題沒有迴應其他用戶音量鍵的使用方法:檢查時,屏幕關閉

我已經寫了使用硬件音量按鈕的Andoid應用另一個目的。

,如果應用程序正在運行,可見,但是當我打開 屏幕關閉或讓它超時,它工作正常,按鈕點擊不進入我的 處理程序。

有沒有人知道是否有方法檢測這些按鈕點擊時 屏幕關閉? 來源:AV695's question

我工作的一個應用程序自己,利用一個音量按鈕,但該用戶還指出,檢查與onkeypress事件按鈕的正常行爲停止工作,一旦屏幕關閉。這是因爲活動在屏幕上暫停。

有沒有辦法在屏幕關閉時保持活動運行,或在屏幕關閉時檢查音量按鈕的使用情況?我曾嘗試過使用此服務,但無法檢查Commonsware指出的音量鍵。

+0

你有沒有任何事情的例子,似乎這樣做,這將表明它甚至有可能?除了應用程序CPU正在運行但屏幕關閉的有限情況之外,是否有任何跡象表明內核被喚醒並意識到鍵被按下的事實?如果不是硬件或者至少需要無線固件MODS。只有當內核知道關鍵事件時,它纔會成爲說服平臺讓你的代碼知道它的問題。 – 2012-04-26 19:14:07

+0

可悲的是我沒有。我唯一能想到的就是媒體播放器。 我開始相信我的想法,就像它一樣簡單(無需將手機從口袋中取出,只需按下音量按鈕即可讓您的設備振動,如果您有通知未決,請檢查通知)是太複雜而無法創建。 – 2012-04-26 20:30:37

+0

如果狀態欄中有新的通知,包括來自第三方應用的自定義通知,LED通常不會閃爍? – 2012-04-26 21:07:14

回答

6

我懷疑,這是支持(而不是訴諸電池排水激活鎖定)在任的平臺,內核,或者下面的無線固件級別不修改,最後把音量在睡眠期間按下內核的注意力。

在合理的系統ROM修改範圍內,更合理的一種可能是修改現有的開源ROM,以便設備將一些自定義平臺級代碼插入到通常用於喚醒設備準備解鎖它 - 至少我們知道確實引起了內核的注意。然後,該代碼可以通過聲音或振動通知用戶是否有未確認的通知。

您可以選擇簡單地等待,檢查設備方向,或尋找另一個按鍵,以避免在用戶將設備放在口袋外並試圖解鎖時以煩人的方式進行操作。


或者你不能使用音量鍵,只是設置一個計時器,喚醒每15分鐘和振動,如果有未確認的通知,避免了需要在那些口袋裏摸索。


你提到這是一個自定義的請求:如果意味着它是一次性的或低容積,另一個值得考慮的選擇將是少數廠商具備「藍牙手錶」出與SDK,讓您從一個推送通知Android設備。

如果您可以在生成通知時捕獲通知,可以將通知推送到用戶的手腕,然後讓手機重新進入睡眠狀態。

+3

感謝您的廣泛評論。可悲的是,我想我會停止考慮這個小小的項目,繼續前進,可能會在未來的地方再次嘗試,這樣的事情會更容易一些。這是那些「哎呀,你知道什麼會很酷嗎?」一種來自隨機在線陌生人的想法,所以我認爲藍牙手錶的想法有點太過分了。感謝這個主意,雖然:) – 2012-05-02 11:03:41

+0

實際上訴諸於喚醒鎖定時,你會怎麼做?在我看來,一旦屏幕關閉,活動會暫停並且沒有任何密鑰被傳送? – ondra 2017-10-23 14:58:55

2

當您的應用程序處於後臺時,您無法攔截該鍵,而無法監聽KeyPress本身。您可以註冊一個ContentObserver,如this question中所述。

0

正如克里斯·斯特拉頓所說,保持你的應用程序活着的唯一方法是使用電池耗盡的喚醒鎖。

但是,由於我發現自己處於相同的情況,我想出了另一種解決方案。不幸的是,你需要一個紮根設備以及Xposed框架。

使用Xposed替代zygot進程,以便您可以將自己綁定到系統的任何構造函數和方法中,您將能夠在系統處理它們之前捕獲原始KeyEvent。

這是在PhoneWindowManager.interceptKeyBeforeQueueing()中完成的。通過使用XC_MethodHook,即使設備處於深度睡眠狀態,也可以使用上述方法的beforeHookedMethod()來捕獲每個硬件按鈕事件。

在您感興趣的事件發生後,您可以創建一個臨時喚醒鎖來執行您的操作,但是請不要忘記在完成工作後釋放喚醒鎖。

如何做到這一點的一個很好的例子是Xposed Torch模塊。 但是,如果你依賴於一個非根系統,壞消息是,它是根本不可能的,沒有電池耗盡...

0

我也試圖在我的應用程序中實現音量按鈕按下檢測,一旦核心部分完成,稍後將開發部分。即使手機處於鎖定狀態,屏幕仍處於開啓狀態,我可以從後臺服務中檢測音量按鍵。

背景視頻錄像機2(BVR2)(也可能是BVR1,我沒試過)是即使屏幕關閉時也可以檢測音量按鍵的應用程序之一。在屏幕關閉的情況下嘗試實現音量鍵檢測時,我安裝了BVR2,希望能夠找到它的工作原理。令我驚訝的是,它使我的應用程序能夠在屏幕關閉的情況下檢測音量鍵。我的應用程序有一個ContentObserver來監視音量變化,但屏幕關閉時不起作用。當BVR2處於活動狀態時,我的應用程序也可以在屏幕關閉時檢測音量按鍵。仍在挖掘。

但BVR2有其自己的觸發動作,即錄製視頻,您可能不希望出現的動作只是爲了您的應用程序檢測音量按鍵。

另一個應用程序是QuickClick。這個程序可以讓你的應用程序就是缺乏,檢測音量按鍵,即使屏幕關閉電源,無需額外的不必要的行動。只需安裝QuickClick並且不要配置任何操作。創建一個ContentObserver來監視流音量更改,然後就緒。即使屏幕關閉,您的應用程序現在也可以檢測音量按鍵。

請注意,我的應用程序作爲後臺服務。

上述兩種應用程序是指用於其他用途,但使用音量鍵檢測到執行的動作。我無法連接到任何提及的應用程序。

如果這些應用程序,可能幾十人,可以檢測音量按鍵,它可以做到的。我請求專家瞭解如何執行此操作,以便我們可以在不依賴其他應用程序的情況下在我們的應用程序中實施。

如果您覺得這個回答有用,請投票。