應用內懸浮窗,無需一切許可權,適配所有ROM和廠商
懸浮窗實現傳統方案
對於傳統懸浮窗和一些古老的“黑科技”懸浮窗的實現,想必已經有很多成熟的案例了,實現策略基本為以下兩種:
- TYPE_SYSTEM_ALERT型別
mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams() layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
需要許可權:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" ></uses>
- TYPE_TOAST / TYPE_PHONE 型別
7.1.1以下不需要許可權宣告,在魅族、華為、小米等機型上預設隱藏,需要引導使用者開啟懸浮窗。
傳統方案的問題
第一種方案因為存在各種限制,不能被眾多開發採納,故而比較流行的懸浮窗實現方式是第二種。
但是,我們有自己的原則:
- 不能接受7.1.1以上機型,使用第二種方式實現懸浮窗仍需要使用者主動授予許可權的操作?
- 不能接受在魅族、華為、小米等機型上預設隱藏,需要引導使用者開啟懸浮窗,就像這樣
[站外圖片上傳中...(image-18b632-1541251502358)]
功能
- 應用內顯示,無需申請任何許可權
- 應用內顯示,所有機型都可以預設顯示懸浮窗,無需引導使用者做更多設定
- 支援拖拽
- 超出螢幕限制移動
- 可自動吸附到螢幕邊緣
使用規則
-
在基類Activity(注意必須是基類Activity)中的onStart和onStop新增如下程式碼
@Override protected void onStart() { super.onStart(); FloatingViewManager.getInstance().attach(this); } @Override protected void onStop() { super.onStop(); FloatingViewManager.getInstance().detach(this); }
-
展示懸浮窗
FloatingViewManager.getInstance().add(getApplicationContext());
-
銷燬懸浮窗
FloatingViewManager.getInstance().remove();
效果圖

預覽圖