Android 使用懸浮視窗

1. 在Activity 啟動 Service

startService(new Intent(this, FloatingShortcutService.class));
<service android:name="com.yenhsun.floatingshortcut.FloatingShortcutService" />


2. 加入 permission

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

3. 設定 params

    public WindowManager.LayoutParams getDefaultWindowManagerParamsSettings() {
        WindowManager.LayoutParams params = new WindowManager.LayoutParams();
        params.x = 0;
        params.y = 0;
        params.height = 500;
        params.width = 500;
        params.type = LayoutParams.TYPE_PHONE;
        params.format = PixelFormat.RGBA_8888;
        params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED
                | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR
                | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;

        params.gravity = Gravity.LEFT | Gravity.TOP;
        params.windowAnimations = android.R.style.Animation_Toast; //僅可以使用系統內的動畫種類
        params.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN;

        return params;
    }

4. 使用windowManager.addView

private WindowManager wm;

wm = (WindowManager)mContext.getSystemService("window");
View mFloating = new View(mContext);
wm.addView(mFloating, wmParams);

5. 記得最後要 remove

wm.removeView(mFloating);

簡單的說,就是使用一個Service 加入一個 view 到 windowmanager 內,就可以在螢幕上看到你所加入的視窗,

只要Service 一直存在系統中,就可以一直控制這個 View。

但是 backaground Service 常常因為內存的關係所以被系統 kill ,如果設定成 foreground service 又會看到 notification icon,這該如何是好呢?

有個小方法,就是把 notification 顯示的時間設定成最大 (ex 999999) ,並且把 priority 設成最小 (ex Notification.PRIORITY_MIN)

就可以幾乎看不到 notification 但是又是 foreground service!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值