2013-06-28 45 views
0

我想繼續收聽長時間按下背景中的音量增大按鈕時觸發我想要完成一些過程。收聽音量提高按鈕,並激活android中的進程

我可以在我的應用程序中做到這一點,沒有任何問題。當我的應用程序沒有運行時,我想達到同樣的效果 - 認爲服務是最好的交易,但我相信服務不能聽重要事件,所以我可以在廣播接收器中實現相同的工作嗎?接收器能否在沒有運行應用程序的情況下運行

有人可以幫我解決這個問題嗎?

謝謝!

+0

你爲什麼要這樣做?您只想在應用關閉時通過硬件按鈕觸發事件嗎?如果是這樣,我發現了一個黑客的解決方法,但它只適用於電源按鈕。 – eski

+0

電源按鈕對我來說也很好。如果我長按5倍音量按鈕,我想用我的應用程序觸發一些過程。 – TheDevMan

回答

1

當您的應用程序未在前臺運行時,Android SDK不打算讓您能夠執行此操作。也許在NDK中是可能的,或者如果你知道如何用root權限訪問操作系統(但是這需要用戶根設備)。

我研究了很久以前,這是我能想到的最好的,它依靠的事實是,當按下電源按鈕時,屏幕關閉並打開(我還沒有看到任何設備情況並非如此)。此事件是您的應用未運行時您可以收到的內容。


註冊一個BroadcastReceiver或服務與下面的IntentFilter收到意圖:

IntentFilter f = new IntentFilter(); 
f.addAction(Intent.ACTION_SCREEN_ON); 
f.addAction(Intent.ACTION_SCREEN_OFF); 

當意圖是獲得使用

System.currentTimeMillis() 

得到這個意圖收到的時間戳。

要確保用戶確實想要觸發已實施的事件,您需要鏈接多次按下電源按鈕。使用SharedPreferences保存上次收到事件的時間。

在隨後的電源按鈕按下後,檢查當前的印刷機是否在上一個印刷機之後沒有發生太長時間。如果是,請重新啓動發生的次數(再次使用SharedPreferences)。

如果當前接收到的電源按鈕處於此最大時間範圍內,並且已按下的次數達到一定量(我使用4作爲默認值,3似乎會導致意外觸發),然後觸發您的事件。


這裏是我對接收器的代碼: https://github.com/eskimoapps/count_stuff/blob/master/Receiver.java

這不是很好的,是從第一個應用程序我在很久以前公佈。如果我解決它,我會重寫它,並把整個事情放在GitHub上。

如果你想看到它在行動這裏是商店上市:

https://play.google.com/store/apps/details?id=count.stuff&hl=en

我會列出別人的應用程序,以避免自廣告,但我不知道任何其他應用程序,做這個。