Android 8.0如何完美適配全局dialog懸浮窗彈出
前言
最近項目targetSdkVersion升級到了26,出現(xiàn)很多問題趟了很多坑,其中就包括本篇的需要解決的問題:全局dialog 不顯示。
出現(xiàn)場景
有時候我們需要在App中彈dialog,但是卻不知道依附的是哪個Activity,這個時候通常會啟動一個service來依附,顯示一個全局的dialog。
Android 6.0出現(xiàn)的懸浮窗權限
為什么從6.0說起?
在Android6.0之后,使用懸浮窗功能需要申請開啟懸浮窗權限,在API23以下版本編譯,懸浮窗權限關閉的,但是沒有權限限制,在大于23版本編譯,這個權限默認是關閉的,需要獲取權限。而且每次使用的時候都要檢測并獲取權限,因為這個權限可以手動關閉。
在6.0之前就有的權限,默認在清單文件中注冊:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
此權限在6.0之后不能彈出全局彈框。
6.0之后判斷是否有懸浮窗權限,沒有則申請權限
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW"/>
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Settings.canDrawOverlays(MainActivity.this)) { Intent intent = new Intent(MainActivity.this, MainService.class); startService(intent); finish(); } else { //若沒有權限,提示獲取. Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); Toast.makeText(MainActivity.this,"需要取得權限以使用懸浮窗",Toast.LENGTH_SHORT).show(); startActivity(intent); } }else { //SDK在23以下,不用管. Intent intent = new Intent(MainActivity.this, MainService.class); startService(intent); finish(); }
Android 8.0對懸浮窗彈框優(yōu)化
Android8.0 修訂記錄中的內容:
Android8.0懸浮窗權限加強.png
主要代碼
//8.0系統(tǒng)加強后臺管理,禁止在其他應用和窗口彈提醒彈窗,如果要彈,必須使用TYPE_APPLICATION_OVERLAY if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)); }else { dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)); } dialog.show();
注意一點,這個在全局dialog顯示中才會出現(xiàn),也就是說沒有具體的Activity依附,再者,顯示的dialog也需要加入theme,不然會報錯。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
Android 程序執(zhí)行Linux命令的解決方法及注意事項
這篇文章主要介紹了Android 程序執(zhí)行LINUX命令的解決方法及注意事項,本文通過問題描述最終到解決方法,給大家介紹的非常詳細,需要的朋友可以參考下2017-12-12android 傳感器(OnSensorChanged)使用介紹
當傳感器的值發(fā)生變化時,例如磁阻傳感器方向改變時會調用OnSensorChanged(). 當傳感器的精度發(fā)生變化時會調用OnAccuracyChanged()方法2014-11-11詳解Android中的NestedScrolling機制帶你玩轉嵌套滑動
這篇文章主要給大家詳細解析了Android中的NestedScrolling機制,通過介紹該機制帶你玩轉Android中的嵌套滑動效果,文中給出了詳細的示例代碼和介紹,需要的朋友們可以參考學習,下面來一起看看吧。2017-05-05Android在Sqlite3中的應用及多線程使用數據庫的建議(實例代碼)
這篇文章主要介紹了Android在Sqlite3中的應用及多線程使用數據庫的建議,包括編寫數據庫具體操作類、增刪改查,通過實例代碼介紹了在實際中的應用,需要的朋友可以參考下2022-04-04