Android開(kāi)發(fā)懸浮窗踩坑解決
正文
最近在做一個(gè)全局懸浮窗的基于ChatGPT應(yīng)用快Ai,需要懸浮于其他應(yīng)用上面,方便從懸浮窗ChatGPT返回的內(nèi)容可以拖拽到其他應(yīng)用內(nèi)部。自身應(yīng)用透明,通過(guò)WindowManger添加懸浮窗。類(lèi)似現(xiàn)在很多應(yīng)用跳轉(zhuǎn)到其他應(yīng)用,會(huì)懸浮一個(gè)小按鈕,方便用戶(hù)點(diǎn)擊調(diào)回自身一樣。只不過(guò)快Ai窗口比較大,但不全屏。
碰到以下幾個(gè)問(wèn)題:
1、懸浮窗中EditText無(wú)法獲得彈出鍵盤(pán)
主要是沒(méi)有明白下面兩個(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
鍵盤(pán)也不會(huì)彈出來(lái)。
此時(shí)懸浮窗外的事件是不會(huì)觸發(fā)懸浮窗內(nèi)View
的onToucheEvent
函數(shù),可以通過(guò)添加WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
標(biāo)志位,但無(wú)法攔截事件。
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
屏幕上彈窗之外的地方能夠點(diǎn)擊、彈窗上的EditText也可以輸入、鍵盤(pán)能夠彈出來(lái)。
所以根據(jù)業(yè)務(wù)需要,我只需要添加WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
標(biāo)志位即可。
2、懸浮窗無(wú)法錄音
通過(guò)Activity調(diào)起Service,然后在Service通過(guò)WindowManager進(jìn)行添加懸浮窗。在進(jìn)行沒(méi)有任何操作,可以正常調(diào)起科大訊飛進(jìn)行錄音。
問(wèn)題點(diǎn)一:同事為了解決我還沒(méi)來(lái)得及修復(fù)的windowManger.removeView改成exitProcess
問(wèn)題,強(qiáng)行各種修改,最終還調(diào)用了activity
的finish
函數(shù),把activity
干掉。最終導(dǎo)致無(wú)法調(diào)起科大訊飛的語(yǔ)音識(shí)別??偸菆?bào)錄音權(quán)限問(wèn)題,找不到任何的問(wèn)題點(diǎn),最后代碼回退,定位到Activity
被干掉,同事也承認(rèn)他的愚蠢行為。
問(wèn)題點(diǎn)二:在進(jìn)行一些操作,例如授權(quán)跳轉(zhuǎn)到設(shè)置之后,退出設(shè)置回到原先界面,調(diào)不錄音,還是權(quán)限。定位答應(yīng)透明Activity
的生命周期,發(fā)現(xiàn)onResume
函數(shù)沒(méi)有被調(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)用,沒(méi)問(wèn)題。但我們想做通用軟件。
- 增加前臺(tái)服務(wù)。實(shí)測(cè)沒(méi)效果。
- 在2的基礎(chǔ)上,再添加一個(gè)屬性:
android:foregroundServiceType="microphone"
。完美。
<service android:name=".ui.service.AiService" android:foregroundServiceType="microphone" />
希望本文對(duì)君有用!
以上就是Android開(kāi)發(fā)懸浮窗踩坑解決的詳細(xì)內(nèi)容,更多關(guān)于Android懸浮窗的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 使用Android實(shí)現(xiàn)跨頁(yè)面懸浮窗效果
- Android懸浮窗的實(shí)現(xiàn)步驟
- Android 無(wú)障礙全局懸浮窗實(shí)現(xiàn)示例
- Android實(shí)現(xiàn)懸浮窗效果
- Android應(yīng)用內(nèi)懸浮窗Activity的簡(jiǎn)單實(shí)現(xiàn)
- Android超簡(jiǎn)單懸浮窗使用教程
- Android實(shí)現(xiàn)懸浮窗的簡(jiǎn)單方法實(shí)例
- Android創(chuàng)建懸浮窗的完整步驟
- Android 懸浮窗開(kāi)發(fā)示例((動(dòng)態(tài)權(quán)限請(qǐng)求 | 前臺(tái)服務(wù)和通知 | 懸浮窗創(chuàng)建 )
相關(guān)文章
Android實(shí)現(xiàn)畫(huà)中畫(huà)功能(圖片)
畫(huà)中畫(huà)是一種特殊類(lèi)型的多窗口模式,最常用于視頻播放。這篇文章主要介紹了Android實(shí)現(xiàn)畫(huà)中畫(huà)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08Android圓形旋轉(zhuǎn)菜單開(kāi)發(fā)實(shí)例
本文給大家分享一個(gè)動(dòng)畫(huà)菜單,基于android開(kāi)發(fā)圓形旋轉(zhuǎn)菜單案例,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-09-09Android對(duì)sdcard擴(kuò)展卡文件操作實(shí)例詳解
這篇文章主要介紹了Android對(duì)sdcard擴(kuò)展卡文件操作,非常實(shí)用的技術(shù),需要的朋友可以參考下2014-07-07Android使用Kotlin實(shí)現(xiàn)多節(jié)點(diǎn)進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了Android使用Kotlin實(shí)現(xiàn)多節(jié)點(diǎn)進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03Android中Intent傳遞對(duì)象的兩種方法Serializable,Parcelable
這篇文章主要介紹了Android中的傳遞有兩個(gè)方法,一個(gè)是Serializable,另一個(gè)是Parcelable,對(duì)intent傳遞對(duì)象的兩種方法感興趣的朋友一起學(xué)習(xí)吧2016-01-01Android中WebView的使用與后退鍵處理詳細(xì)講解
博主自從開(kāi)始寫(xiě)安卓以來(lái),一直飽受WebView的摧殘,好在網(wǎng)上一大堆的大神給出了他們成長(zhǎng)路上遇到的坑以及一些解決辦法,這篇文章主要給大家介紹了關(guān)于Android中WebView的使用與后退鍵處理的相關(guān)資料,需要的朋友可以參考下2024-04-04Templates實(shí)戰(zhàn)之更優(yōu)雅實(shí)現(xiàn)自定義View構(gòu)造方法詳解
本篇文章介紹如何利用Android Studio提供的Live Templates更優(yōu)雅實(shí)現(xiàn)自定義View的構(gòu)造方法,說(shuō)句人話就是:簡(jiǎn)化自定義View構(gòu)造參數(shù)模板代碼的編寫(xiě),實(shí)現(xiàn)自動(dòng)生成,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Android RecyclerView實(shí)現(xiàn)數(shù)據(jù)列表展示效果
這篇文章主要為大家詳細(xì)介紹了Android RecyclerView實(shí)現(xiàn)數(shù)據(jù)列表展示效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07android實(shí)現(xiàn)簡(jiǎn)單圓弧效果
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)簡(jiǎn)單圓弧效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08