您好,登錄后才能下訂單哦!
這篇文章主要講解了“Android開發懸浮窗踩坑問題怎么解決”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Android開發懸浮窗踩坑問題怎么解決”吧!
主要是沒有明白下面兩個屬性的作用,在網上搜索之后直接設置了。
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
設置FLAG_NOT_FOCUSABLE
,懸浮窗外的點擊才有效,會把事件分發給懸浮窗底層的其他應用Activity
。如果設置了FLAG_NOT_FOCUSABLE
,那么屏幕上彈窗之外的地方能夠點擊、但是彈窗上的EditText
鍵盤也不會彈出來。
此時懸浮窗外的事件是不會觸發懸浮窗內View
的onToucheEvent
函數,可以通過添加WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
標志位,但無法攔截事件。
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
屏幕上彈窗之外的地方能夠點擊、彈窗上的EditText也可以輸入、鍵盤能夠彈出來。
所以根據業務需要,我只需要添加WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
標志位即可。
通過Activity調起Service,然后在Service通過WindowManager進行添加懸浮窗。在進行沒有任何操作,可以正常調起科大訊飛進行錄音。
問題點一:同事為了解決我還沒來得及修復的windowManger.removeView改成exitProcess
問題,強行各種修改,最終還調用了activity
的finish
函數,把activity
干掉。最終導致無法調起科大訊飛的語音識別。總是報錄音權限問題,找不到任何的問題點,最后代碼回退,定位到Activity
被干掉,同事也承認他的愚蠢行為。
問題點二:在進行一些操作,例如授權跳轉到設置之后,退出設置回到原先界面,調不錄音,還是權限。定位答應透明Activity
的生命周期,發現onResume
函數沒有被調用到,所以應用現在在后臺運行。
所以就一頓頓頓搜索,官方文檔: Android 9 對后臺運行的應用增加了權限限制。
解決方法:
聲明為系統應用,沒問題。但我們想做通用軟件。
增加前臺服務。實測沒效果。
在2的基礎上,再添加一個屬性:android:foregroundServiceType="microphone"
。完美。
<service android:name=".ui.service.AiService" android:foregroundServiceType="microphone" />
感謝各位的閱讀,以上就是“Android開發懸浮窗踩坑問題怎么解決”的內容了,經過本文的學習后,相信大家對Android開發懸浮窗踩坑問題怎么解決這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。