這篇文章主要介紹Android 8.0完美適配全局dialog懸浮窗彈出的案例,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
前言
最近項(xiàng)目targetSdkVersion升級(jí)到了26,出現(xiàn)很多問題趟了很多坑,其中就包括本篇的需要解決的問題:全局dialog 不顯示。
出現(xiàn)場(chǎng)景
有時(shí)候我們需要在App中彈dialog,但是卻不知道依附的是哪個(gè)Activity,這個(gè)時(shí)候通常會(huì)啟動(dòng)一個(gè)service來(lái)依附,顯示一個(gè)全局的dialog。
Android 6.0出現(xiàn)的懸浮窗權(quán)限
為什么從6.0說(shuō)起?
在Android6.0之后,使用懸浮窗功能需要申請(qǐng)開啟懸浮窗權(quán)限,在API23以下版本編譯,懸浮窗權(quán)限關(guān)閉的,但是沒有權(quán)限限制,在大于23版本編譯,這個(gè)權(quán)限默認(rèn)是關(guān)閉的,需要獲取權(quán)限。而且每次使用的時(shí)候都要檢測(cè)并獲取權(quán)限,因?yàn)檫@個(gè)權(quán)限可以手動(dòng)關(guān)閉。
在6.0之前就有的權(quán)限,默認(rèn)在清單文件中注冊(cè):
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
此權(quán)限在6.0之后不能彈出全局彈框。
6.0之后判斷是否有懸浮窗權(quán)限,沒有則申請(qǐng)權(quán)限
<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 { //若沒有權(quán)限,提示獲取. Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); Toast.makeText(MainActivity.this,"需要取得權(quán)限以使用懸浮窗",Toast.LENGTH_SHORT).show(); startActivity(intent); } }else { //SDK在23以下,不用管. Intent intent = new Intent(MainActivity.this, MainService.class); startService(intent); finish(); }
Android 8.0對(duì)懸浮窗彈框優(yōu)化
Android8.0 修訂記錄中的內(nèi)容:
Android8.0懸浮窗權(quán)限加強(qiáng).png
主要代碼
//8.0系統(tǒng)加強(qiáng)后臺(tái)管理,禁止在其他應(yī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();
注意一點(diǎn),這個(gè)在全局dialog顯示中才會(huì)出現(xiàn),也就是說(shuō)沒有具體的Activity依附,再者,顯示的dialog也需要加入theme,不然會(huì)報(bào)錯(cuò)。
以上是“Android 8.0完美適配全局dialog懸浮窗彈出的案例”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
分享名稱:Android8.0完美適配全局dialog懸浮窗彈出的案例-創(chuàng)新互聯(lián)
文章來(lái)源:http://chinadenli.net/article22/dcpecc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、品牌網(wǎng)站制作、電子商務(wù)、網(wǎng)站策劃、關(guān)鍵詞優(yōu)化、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容