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

解決方法:
- 聲明為系統(tǒng)應(yīng)用,沒問題。但我們想做通用軟件。
- 增加前臺(tái)服務(wù)。實(shí)測(cè)沒效果。
- 在2的基礎(chǔ)上,再添加一個(gè)屬性:
android:foregroundServiceType="microphone"。完美。
<service android:name=".ui.service.AiService"
android:foregroundServiceType="microphone"
/>
希望本文對(duì)君有用!
以上就是Android開發(fā)懸浮窗踩坑解決的詳細(xì)內(nèi)容,更多關(guān)于Android懸浮窗的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 使用Android實(shí)現(xiàn)跨頁面懸浮窗效果
- Android懸浮窗的實(shí)現(xiàn)步驟
- Android 無障礙全局懸浮窗實(shí)現(xiàn)示例
- Android實(shí)現(xiàn)懸浮窗效果
- Android應(yīng)用內(nèi)懸浮窗Activity的簡單實(shí)現(xiàn)
- Android超簡單懸浮窗使用教程
- Android實(shí)現(xiàn)懸浮窗的簡單方法實(shí)例
- Android創(chuàng)建懸浮窗的完整步驟
- Android 懸浮窗開發(fā)示例((動(dòng)態(tài)權(quán)限請(qǐng)求 | 前臺(tái)服務(wù)和通知 | 懸浮窗創(chuàng)建 )
相關(guān)文章
Android圓形旋轉(zhuǎn)菜單開發(fā)實(shí)例
本文給大家分享一個(gè)動(dòng)畫菜單,基于android開發(fā)圓形旋轉(zhuǎn)菜單案例,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-09-09
Android對(duì)sdcard擴(kuò)展卡文件操作實(shí)例詳解
這篇文章主要介紹了Android對(duì)sdcard擴(kuò)展卡文件操作,非常實(shí)用的技術(shù),需要的朋友可以參考下2014-07-07
Android使用Kotlin實(shí)現(xiàn)多節(jié)點(diǎn)進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了Android使用Kotlin實(shí)現(xiàn)多節(jié)點(diǎn)進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
Android中Intent傳遞對(duì)象的兩種方法Serializable,Parcelable
這篇文章主要介紹了Android中的傳遞有兩個(gè)方法,一個(gè)是Serializable,另一個(gè)是Parcelable,對(duì)intent傳遞對(duì)象的兩種方法感興趣的朋友一起學(xué)習(xí)吧2016-01-01
Android中WebView的使用與后退鍵處理詳細(xì)講解
博主自從開始寫安卓以來,一直飽受WebView的摧殘,好在網(wǎng)上一大堆的大神給出了他們成長路上遇到的坑以及一些解決辦法,這篇文章主要給大家介紹了關(guān)于Android中WebView的使用與后退鍵處理的相關(guān)資料,需要的朋友可以參考下2024-04-04
Templates實(shí)戰(zhàn)之更優(yōu)雅實(shí)現(xiàn)自定義View構(gòu)造方法詳解
本篇文章介紹如何利用Android Studio提供的Live Templates更優(yōu)雅實(shí)現(xiàn)自定義View的構(gòu)造方法,說句人話就是:簡化自定義View構(gòu)造參數(shù)模板代碼的編寫,實(shí)現(xiàn)自動(dòng)生成,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
Android RecyclerView實(shí)現(xiàn)數(shù)據(jù)列表展示效果
這篇文章主要為大家詳細(xì)介紹了Android RecyclerView實(shí)現(xiàn)數(shù)據(jù)列表展示效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07

