Android開發(fā)懸浮窗踩坑解決
正文
最近在做一個全局懸浮窗的基于ChatGPT應(yīng)用快Ai,需要懸浮于其他應(yīng)用上面,方便從懸浮窗ChatGPT返回的內(nèi)容可以拖拽到其他應(yīng)用內(nèi)部。自身應(yīng)用透明,通過WindowManger添加懸浮窗。類似現(xiàn)在很多應(yīng)用跳轉(zhuǎn)到其他應(yīng)用,會懸浮一個小按鈕,方便用戶點擊調(diào)回自身一樣。只不過快Ai窗口比較大,但不全屏。
碰到以下幾個問題:
1、懸浮窗中EditText無法獲得彈出鍵盤
主要是沒有明白下面兩個屬性的作用,在網(wǎng)上搜索之后直接設(shè)置了。
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
設(shè)置FLAG_NOT_FOCUSABLE,懸浮窗外的點擊才有效,會把事件分發(fā)給懸浮窗底層的其他應(yīng)用Activity。如果設(shè)置了FLAG_NOT_FOCUSABLE,那么屏幕上彈窗之外的地方能夠點擊、但是彈窗上的EditText鍵盤也不會彈出來。
此時懸浮窗外的事件是不會觸發(fā)懸浮窗內(nèi)View的onToucheEvent函數(shù),可以通過添加WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH標(biāo)志位,但無法攔截事件。
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
屏幕上彈窗之外的地方能夠點擊、彈窗上的EditText也可以輸入、鍵盤能夠彈出來。
所以根據(jù)業(yè)務(wù)需要,我只需要添加WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL標(biāo)志位即可。
2、懸浮窗無法錄音
通過Activity調(diào)起Service,然后在Service通過WindowManager進行添加懸浮窗。在進行沒有任何操作,可以正常調(diào)起科大訊飛進行錄音。
問題點一:同事為了解決我還沒來得及修復(fù)的windowManger.removeView改成exitProcess問題,強行各種修改,最終還調(diào)用了activity的finish函數(shù),把activity干掉。最終導(dǎo)致無法調(diào)起科大訊飛的語音識別。總是報錄音權(quán)限問題,找不到任何的問題點,最后代碼回退,定位到Activity被干掉,同事也承認他的愚蠢行為。
問題點二:在進行一些操作,例如授權(quán)跳轉(zhuǎn)到設(shè)置之后,退出設(shè)置回到原先界面,調(diào)不錄音,還是權(quán)限。定位答應(yīng)透明Activity的生命周期,發(fā)現(xiàn)onResume函數(shù)沒有被調(diào)用到,所以應(yīng)用現(xiàn)在在后臺運行。
所以就一頓頓頓搜索,官方文檔: Android 9 對后臺運行的應(yīng)用增加了權(quán)限限制。

解決方法:
- 聲明為系統(tǒng)應(yīng)用,沒問題。但我們想做通用軟件。
- 增加前臺服務(wù)。實測沒效果。
- 在2的基礎(chǔ)上,再添加一個屬性:
android:foregroundServiceType="microphone"。完美。
<service android:name=".ui.service.AiService"
android:foregroundServiceType="microphone"
/>
希望本文對君有用!
以上就是Android開發(fā)懸浮窗踩坑解決的詳細內(nèi)容,更多關(guān)于Android懸浮窗的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android使用Kotlin實現(xiàn)多節(jié)點進度條
這篇文章主要為大家詳細介紹了Android使用Kotlin實現(xiàn)多節(jié)點進度條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-03-03
Android中Intent傳遞對象的兩種方法Serializable,Parcelable
這篇文章主要介紹了Android中的傳遞有兩個方法,一個是Serializable,另一個是Parcelable,對intent傳遞對象的兩種方法感興趣的朋友一起學(xué)習(xí)吧2016-01-01
Templates實戰(zhàn)之更優(yōu)雅實現(xiàn)自定義View構(gòu)造方法詳解
本篇文章介紹如何利用Android Studio提供的Live Templates更優(yōu)雅實現(xiàn)自定義View的構(gòu)造方法,說句人話就是:簡化自定義View構(gòu)造參數(shù)模板代碼的編寫,實現(xiàn)自動生成,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09
Android RecyclerView實現(xiàn)數(shù)據(jù)列表展示效果
這篇文章主要為大家詳細介紹了Android RecyclerView實現(xiàn)數(shù)據(jù)列表展示效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07

