框架的一些部分對我來說還不是很清楚。我熟知輸入事件的流程(內核 - > Eventhub - > InputReader - > InputDispatcher - > ...)。Android鍵處理(框架)
形勢
(要求:處理輸入鍵在不改變Android框架) 我想處理從設備(鍵盤/遊戲手柄/控制器/ ...),但未來的關鍵事件有是一些要求。首先,我不想更改Android框架。這意味着,我不想擴展WindowManagerPolicy
及其功能,如interceptKeyBeforeDispatching
,其中家庭密鑰正在處理。這將導致關鍵事件被分派到應用程序層,這很好。缺點是,我在這裏有另一個棘手的要求。 示例:當我在玩憤怒的小鳥時,我在連接的輸入設備上按下GoToAlpha按鈕時,Alpha應用程序必須啓動。憤怒的小鳥不知道哪個按鈕是GoToAlpha,不會處理/識別它,並且例如沒有意圖廣播來啓動我的Alpha應用程序。
問題
有沒有一種方式,它被分派後處理我的(自定義)按鍵事件,知道在前臺的應用程序無法處理的關鍵?
我的(失敗的)解決方案
創建一個將處理的關鍵事件的服務。這是不可能的,因爲像憤怒的小鳥這樣的應用程序不會綁定到我的服務上,關鍵事件不會被我的服務所捕獲。如果我錯了,請提供更多信息:)。
創建一個外部庫,允許我的應用程序的活動從我自己的ActivityBase繼承。所有關鍵事件和默認行爲都可以在這裏處理。缺點是,現有的應用程序不會支持我的自定義關鍵事件,因爲它們不使用庫。
擴展框架將在我眼中是最乾淨的解決方案,但這將導致不符合我的要求。
任何幫助或有用的信息,將不勝感激
額外
如果第一個問題可以在這樣或那樣的..可以解決我想 定製我的GoToAlpha按鈕後面的
Intent
。這意味着..通過 默認的Alpha應用程序將啓動,但用戶有 定製它後,Beta應用程序將從現在開始..任何 的想法?
感謝
如果可以從其他應用程序捕獲關鍵事件,這不是很奇怪嗎?我想這會是一個安全風險 – Boy 2012-08-14 08:25:39
是真的。一旦關鍵事件離開框架,它將只發送到一個應用程序並在那裏處理。如果不是,則返回到框架。這意味着沒有解決方案可以滿足我的要求? – DroidBender 2012-08-14 08:32:13
在我看來,僅僅因爲安全問題,可能沒有辦法:處理關鍵事件,而您的應用程序沒有焦點。也許唯一的辦法是如果你實現一個Android鍵盤(我沒有知道這一點)?這應該能夠處理關鍵事件(當你選擇第三方鍵盤時,用戶也會指出這種安全風險) – Boy 2012-08-14 08:45:11