當前位置:九游会j9娱乐平台-九游ag登录中心网址 » 安卓系統 » android懸浮窗動畫

android懸浮窗動畫-九游会j9娱乐平台

發布時間: 2024-06-23 17:17:31

⑴ android8.0之懸浮窗和通知欄

懸浮窗:

        使用場景:例如微信在視頻的時候,點擊home鍵,視頻小窗口仍然會在屏幕上顯示;

        注意事項:

                1、一般需要在後台進行操作的時候才需要懸浮窗,這樣懸浮窗才有意義;

                2、api level >= 23的時候,需要在androidmanefest.xml文件中聲明許可權system_alert_window才能在其他應用上繪制控制項。

;除了這個許可權外,我們還需要在系統設置裡面對本應用進行設置懸浮窗許可權。該許可權在應用中需要啟動settings.action_manage_overlay_permission來讓用戶手動設置許可權:startactivityforresult(new intent(settings.action_manage_overlay_permission, uri.parse("package:" getpackagename())), request_code);

                3、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 android.view.viewrootimpl$w@f8ec928 -- permission denied for window type 2002;

        具體實現:

        1、activity:
        public void startfloatingservice(view view) {        

    ...

    if (!settings.candrawoverlays(this)) {

        toast.maketext(this, "當前無許可權,請授權", toast.length_short);

        startactivityforresult(new intent(settings.action_manage_overlay_permission, uri.parse("package:" getpackagename())), 0);

    } else {

        startservice(new intent(mainactivity.this, floatingservice.class));

    }

}

@override

protected void onactivityresult(int requestcode, int resultcode, intent data) {

    if (requestcode == 0) {

        if (!settings.candrawoverlays(this)) {

            toast.maketext(this, "授權失敗", toast.length_short).show();

        } else {

            toast.maketext(this, "授權成功", toast.length_short).show();

            startservice(new intent(mainactivity.this, floatingservice.class));

        }

    }

}

2、service:

@override

public int onstartcommand(intent intent, int flags, int startid) {

    showfloatingwindow();

    return super.onstartcommand(intent, flags, startid);

}

private void showfloatingwindow() {

    if (settings.candrawoverlays(this)) {

        // 獲取windowmanager服務

        windowmanager windowmanager = (windowmanager) getsystemservice(window_service);

        // 新建懸浮窗控制項

        button button = new button(getapplicationcontext());

        button.settext("floating window");

        button.setbackgroundcolor(color.blue);

        // 設置layoutparam

        windowmanager.layoutparams layoutparams = new windowmanager.layoutparams();

        if (build.version.sdk_int >= build.version_codes.o) {

            layoutparams.type = windowmanager.layoutparams.type_application_overlay;

        } else {

            layoutparams.type = windowmanager.layoutparams.type_phone;

        }

        layoutparams.format = pixelformat.rgba_8888;

        layoutparams.width = 500;

        layoutparams.height = 100;

        layoutparams.x = 300;

        layoutparams.y = 300;

        // 將懸浮窗控制項添加到windowmanager

        windowmanager.addview(button, layoutparams);

    }

}

        效果展示:

                

熱點內容
發布:2024-07-17 17:13:27 瀏覽:872
phpjava交互 發布:2024-07-17 16:58:57 瀏覽:356
resin下jsp不能正常編譯 發布:2024-07-17 16:34:44 瀏覽:229
sqlserver如何切換主備伺服器 發布:2024-07-17 16:23:02 瀏覽:299
mc18伺服器ip 發布:2024-07-17 16:23:02 瀏覽:379
仙境傳說手游腳本 發布:2024-07-17 16:09:24 瀏覽:691
matlab命令窗口和新建腳本 發布:2024-07-17 15:51:26 瀏覽:375
建ftp文件夾 發布:2024-07-17 15:51:26 瀏覽:955
魔獸撿物腳本 發布:2024-07-17 15:27:56 瀏覽:130
開發ip伺服器 發布:2024-07-17 15:24:42 瀏覽:388
网站地图