2014-01-07 44 views
6

我有一個在服務中創建的浮動視圖,當我觸摸此視圖時,我需要調度關鍵事件。 我發現view.dispatchKeyEvent()需要前臺活動的上下文,而關鍵事件分派只在活動處於前臺時才起作用。 當您關閉/暫停活動並觸摸視圖時 - 沒有任何反應,即使LogCat中沒有NPE。dispatchKeyEvent來自服務

有什麼方法可以在主要活動之外使用此方法嗎?

+0

任何運氣與此事? – Behnam

+2

我找到了另一種方法。對不起,我沒有發佈,我會編輯問題或在週六或週日告訴你。 –

+0

好的,謝謝,你可以收到我在behnam(點)heydarshahi(at_sgin)gmail(點)com – Behnam

回答

3

如果我理解正確(您沒有發佈任何源代碼),您需要在應用程序外部對所有應用程序接收關鍵事件進行浮動視圖。

有一些項目顯示這種能力。 (forum-threadandroidFloatingImage-repo

嘗試使用此浮動視圖示例來創建對方,或使用完全相同。我認爲,使用我上面寫的東西,您可以正確使用關鍵事件的回調。希望能幫助到你;

+0

最重要的問題是如何在活動不是前臺時攔截關鍵事件。 – Behnam

+0

如果你的android手機上有facebook messenger。它使用相同的浮動視圖。它提供了在屏幕上方輸入文字的所有其他應用程序。我沒有嘗試這個,但我確定有可能處理關鍵事件。你嘗試使用我上面提到的? – busylee

+0

問題是,我的浮動佈局中沒有EditText。所以我需要手動攔截關鍵事件,但我不知道如何。 – Behnam

0

這可能有點太晚了,但我找到了解決方案。 (假設OP仍然希望從浮動視圖或服務中觸發操作系統後退按鈕)。

如果您是註冊的Accessibility Service,似乎可以告訴Android按後退按鈕。 (一旦你的組件註冊了Android,用戶必須在系統設置中明確地啓用它,所以如果這僅僅是你的應用程序的一個小衆功能,而不是一個關鍵功能,它可能是一種矯枉過正)。完成註冊等。因此,你的後臺服務可以告訴輔助服務,從輔助服務調用

performGlobalAction(GLOBAL_ACTION_BACK)

執行後退按鈕,它可以做到的。

您確實需要API級別16或以上才能正常工作。

我還沒有得到測試這個,但根據文檔,這應該工作。 嘗試並在最近的一些設備上工作。 (Kitkat,Marshmellow和Nouget)

我發現應用程序Back Button (No root)在Play商店,似乎使用這種技術來繪製軟按鈕回來,回家.etc。 (它適用於LG Nexus 5X和三星Galaxy Tab A 2016)

HTH