欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android開(kāi)發(fā)懸浮窗踩坑解決

 更新時(shí)間:2023年03月17日 08:42:37   作者:新小夢(mèng)  
這篇文章主要為大家介紹了Android懸浮窗踩坑解決示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

最近在做一個(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)ViewonToucheEvent函數(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)用了activityfinish函數(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)文章!

相關(guān)文章

最新評(píng)論