1. 程式人生 > >Android懸浮窗適配全機型,包含8.0,小米魅族華為懸浮窗許可權適配demo看這一篇就夠了

Android懸浮窗適配全機型,包含8.0,小米魅族華為懸浮窗許可權適配demo看這一篇就夠了

相容8.0,小米,魅族,華為等難適配機型都可完美適配。

懸浮窗插入介面

在實現懸浮窗之前,我們需要知道通過什麼介面,能夠將一個控制元件放入到螢幕中去。 Android的介面繪製,都是通過WindowMananger的服務來實現的。那麼,既然要實現一個能夠在自身應用以外的介面上的懸浮窗,我們就要利用WindowManager來“做手腳”。

(frameworks/base/core/java/android/view/WindowMananger.java)

@SystemService(Context.WINDOW_SERVICE)
public interface WindowManager
 extends ViewManager 
{     ... }

WindowManager實現了ViewManager介面,可以通過獲取WINDOW_SERVICE系統服務得到。而ViewManager介面有addView方法,我們就是通過這個方法將懸浮窗控制元件加入到螢幕中去。

許可權設定及請求

懸浮窗需要在別的應用之上顯示控制元件,很顯然,這需要某些許可權才可以。 在API Level >= 23的時候,需要在AndroidManefest.xml檔案中宣告許可權SYSTEM_ALERT_WINDOW才能在其他應用上繪製控制元件。

<uses-permission android:name
="android.permission.SYSTEM_ALERT_WINDOW" />

除了這個許可權外,我們還需要在系統設定裡面對本應用進行設定懸浮窗許可權。該許可權在應用中需要啟動Settings.ACTION_MANAGE_OVERLAY_PERMISSION來讓使用者手動設定許可權。

startActivityForResult(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())), REQUEST_CODE);

LayoutParam設定

WindowManager的addView方法有兩個引數,一個是需要加入的控制元件物件,另一個引數是WindowManager.LayoutParam物件。 

這裡需要著重說明的是LayoutParam裡的type變數。這個變數是用來指定視窗型別的。在設定這個變數時,需要注意一個坑,那就是需要對不同版本的Android系統進行適配。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
    layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;
}

在Android 8.0之前,懸浮視窗設定可以為TYPE_PHONE,這種型別是用於提供使用者互動操作的非應用視窗。 

而Android 8.0對系統和API行為做了修改,包括使用SYSTEM_ALERT_WINDOW許可權的應用無法再使用一下視窗型別來在其他應用和視窗上方顯示提醒視窗: 

  • TYPE_PHONE 

  • TYPE_PRIORITY_PHONE 

  • TYPE_SYSTEM_ALERT 

  • TYPE_SYSTEM_OVERLAY 

  • TYPE_SYSTEM_ERROR 

如果需要實現在其他應用和視窗上方顯示提醒視窗,那麼必須該為TYPE_APPLICATION_OVERLAY的新型別。 如果在Android 8.0以上版本仍然使用TYPE_PHONE型別的懸浮視窗,則會出現如下異常資訊:

android.view.WindowManager$BadTokenException: Unable to add window [email protected] -- permission denied for window type 2002

附懸浮相關,轉載文章

推薦看看這個demo,star不多。有吸附,點選展開,定時縮小,互動體驗不錯

跳轉系統設定介面開啟許可權庫:

star多,比較新

相關推薦

Android懸浮機型包含8.0小米懸浮許可權demo

相容8.0,小米,魅族,華為等難適配機型都可完美適配。 懸浮窗插入介面 在實現懸浮窗之前,我們需要知道通過什麼介面,能夠將一個控制元件放入到螢幕中去。 Android的介面繪製,都是通過WindowMananger的服務來實現的。那麼,既然要實現一個能夠在自身

抖音內容運營解剖 !

抖音的火爆已經不用多說,作為短視訊的頭部APP,抖音已經從微信手中奪走不少使用者時間,成為新的“時間黑洞”。 比如:“中毒了,我每天晚上要刷2個小時”,“下一站,逃離微信,上抖音”… 一個企業運營抖音的目的是什麼? 答案顯而易見,無非就是做品牌營銷、擴大品牌影響力。 在短視訊領域積累

Cookie介紹及在Android中的使用總結超詳細

Cookie介紹 cookie的起源 早期Web開發面臨的最大問題之一是如何管理狀態。簡言之,伺服器端沒有辦法知道兩個請求是否來自於同一個瀏覽器。那時的辦法是在請求的頁面中插入一個token,並且在下一次請求中將這個token返回(至伺服器)。這就需要在form中插入一個包含toke

Android 必須知道2018年流行的框架庫及開發語言

導語2017 已經悄悄的走了,2018 也已經匆匆的來了,我們在總結過去的同時,也要展望一下未來,來規劃一下今年要學哪些新技術。這幾年優秀Android的開源庫不斷推出,新技術層出不窮,需要我們不斷去了解和掌握,在提高自身開發水平的同時,我們需要付出更多學習精力和時間。俗話說

Android 必須知道2018年流行的框架庫及開發語言

本文更新時間:2018年07月12日15:50:40導語    2017 已經悄悄的走了,2018 也已經匆匆的來了,我們在總結過去的同時,也要展望一下未來,來規劃一下今年要學哪些新技術。這幾年優秀Android的開源庫不斷推出,新技術層出不窮,需要我們不斷去了解和掌握,在提

Android EventBus原始碼分析基於最新3.1.1版本,!!

Android EventBus原始碼分析,基於最新3.1.1版本,看這一篇就夠了!! 前言 上一篇文章對EventBus進行了一個介紹,並且對它的使用方式作了一個較全面的分析,建議在閱讀本文之前,先看看上篇文章的內容:EventBus使用(全面分析,細節提醒) 本篇文章主要

【轉】【修真院“善良”系列之十八】WEB程序員從零開始到就業的資料V1.0——只

absolute feed 自己 session rem 好的 ans 一個 css樣式 這是兩年以來,修真院收集整理的學習資料順序。以CSS15個任務,JS15個任務為基礎,分別依據要完成任務的不同的技能點,我們整理出來了這麽一篇在學習的時候需要看到的資料。這是Versi

Azure IOT 設備固件更新技巧

trigger 物聯網平臺 搭建 href ice 有效 面板 調用 創建 嫌長不看版 今天為大家準備的硬菜是:在 Azure IoT 中心創建 Node.js 控制臺應用,進行端到端模擬固件更新,為基於 Intel Edison 的設備安裝新版固件的流程。通過創建模擬設備

想做好PPT折線圖

12月 image 菊花 -c 強調 spa any border 線圖 配圖主題無關今天鄭少跟大家聊聊折線圖的使用方法,或者你有疑問,折線圖很簡單,插入修改數據不就好了嗎?如果你要是這樣想的,恭喜你,有可能你會做出下面這樣的效果。如果你要是稍微懂一點折線圖的使用方法,你就

python3 urllib爬蟲你只需要

寫在最前面:以下資料均脫敏 from urllib import request import requests import urllib if __name__ == "__main__": # 介面的url session_requests = requests.se

Linux 問題故障定位

1. 背景 有時候會遇到一些疑難雜症,並且監控外掛並不能一眼立馬發現問題的根源。這時候就需要登入伺服器進一步深入分析問題的根源。那麼分析問題需要有一定的技術經驗積累,並且有些問題涉及到的領域非常廣,才能定位到問題。所以,分析問題和踩坑是非常鍛鍊一個人的成長和提升自我能力。如果我們有一套好的分析工具,那將是事

C語言從入門到精通

影響 內容 當前 位置 replace 雙精度 下標 寄存器變量 一個 No.1 計算機與程序設計語言的關系 計算機系統由硬件系統和軟件系統構成,硬件相當於人類的肉體,而軟件相當於人類的靈魂,如果脫離了靈魂,人類就是一具行屍走肉 No.2 C語言的特點 代碼簡潔,靈活性高

【MYSQL學習筆記02】MySQL的高階應用之Explain(完美詳細版

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/wx1528159409 最近學習MySQL的高階應用Explain,寫一篇學習心得與總結,目錄腦圖如下: 一、Explain基本概念 1. Explain定義 · 我們知道M

百萬併發下的Nginx優化

本文作者主要分享在 Nginx 效能方面的實踐經驗,希望能給大家帶來一些系統化思考,幫助大家更有效地去做 Nginx。 優化方法論 我重點分享如下兩個問題: 保持併發連線數,怎麼樣做到記憶體有效使用。 在高併發的同時保持高吞吐量的重要要點。 實現層面主要是三方面優化,主要聚焦

理解Sharding jdbc原理

相比於Spring基於AbstractRoutingDataSource實現的分庫分表功能,Sharding jdbc在單庫單表擴充套件到多庫多表時,相容性方面表現的更好一點。例如,spring實現的分庫分表sql寫法如下: select id, name, price,

產品設計教程:如何理解 px,dp,dpi, pt

先聊聊熟悉的幾個單位 圍繞著各種螢幕做設計和開發的人會碰到下面幾個單位:in, pt, px, dpi,dip/dp, sp 下面先簡單回顧下前四個單位: "in" inches的縮寫,英寸。就是螢幕的物理長度單位。一英寸等於2.54cm。比如Android手機

23種設計模式解析-- 設計模式

一、設計模式的分類 總體來說設計模式分為三大類: 建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。 結構型模式,共七種:介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。 行為型模式,共十一種:策

Android開發之顯示(弄懂ppi、dpi、pt、px、dp、dip、sp之間的關係

版權申明】非商業目的註明出處可自由轉載 博文地址:https://blog.csdn.net/ShuSheng0007/article/details/85165773 出自:shusheng007 文章目錄 概述 要解決的疑問 概念篇

中後臺產品的表格設計(原型規範下載)

中後臺產品的表格設計,看這一篇就夠了(原型規範下載) 2018年4月16日luodonggan 中後臺產品的表格設計,看這一篇就夠了(原型規範下載) 經過了將近一年的後臺產品經歷,踩了很多坑,試了很多錯,也學習到了很多東西,目前也形成了自己的一套規範。本文將其中的部分收穫彙總成文,

Linux 常用指令 —— 摘自《Linux Probe》

touch:用於建立空白檔案或設定檔案的時間,ps:黑客可以用touch指令來修改檔案的最後修改時間,以隱藏自己的修改行為。 mkdir:用於建立空白的目錄,如mkdir path,可以結合引數-p來遞迴建立檔案目錄,如mkdir -p a/b/c/d/e cp:用於複製檔案或目錄,如cp 1.txt p