91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android開發怎么實現Application跳出dialog

發布時間:2022-06-09 09:31:47 來源:億速云 閱讀:714 作者:zzz 欄目:開發技術

本文小編為大家詳細介紹“Android開發怎么實現Application跳出dialog”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Android開發怎么實現Application跳出dialog”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

實踐過程

場景還原

線程中監測和硬件的連接,在任何斷開的話需要彈出框給用戶選擇是否重新連接。

所以我們的思路就是不使用依托于Activity的Dialog,而是使用依托于Aplication的Dialog。

Android開發怎么實現Application跳出dialog

開始

首先是動態申請權限

<!--這行代碼必須存在,否則點擊不了系統設置中的按鈕-->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>  
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />

用戶不同意?那就用不了App就行了,我們一般都是如果沒給權限直接退出應用。

現在哪個App不是必須要權限,看似允許用戶自主同意,但哪個不是拒絕后無法使用功能。

所以不用太糾結。

接著在硬件設備斷開連接的回調中處理

//設備斷開連接的回調  isAutoConnectDlg是個dialog彈框

override fun onClientRemove(address: String?, alias: String?) {
    //禁止外部點擊取消
    isAutoConnectDlg!!.setCanceledOnTouchOutside(false)
    isAutoConnectDlg!!.setCancelable(false)
    dlgWindows.setWindowAnimations(R.style.DialogRight)
    //重要 設置彈框類型
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        dlgWindows.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
    } else {
        dlgWindows.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)
    }
    dlgWindows.setLayout(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
    isAutoConnectDlg!!.show()
}

之后在連接成功的回調中取消該彈框即可。

至此基本就可以了。但是還有個特殊情況,就是彈出框后用戶按下了Home也就是回到了桌面,或者是Android的后臺殺進程界面 都會造成該彈框顯示,影響不太好。

這時候就需要我們自定義Application,然后實現ActivityLifecycleCallbacks接口即可,該接口在Android 4.0 就已經退出了,注冊后,所有的Activity生命周期都會回調,方便監聽處理業務。

因為進入后臺頁面,Activity的pause和stop這些就會執行,我們每個Activity去監聽不太合適,所以ActivityLifecycleCallbacks是很好的選擇。

class MyApp : Application(), Application.ActivityLifecycleCallbacks {
    override fun onCreate() {
        super.onCreate()
        registerActivityLifecycleCallbacks(this)
    }
    override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
        TODO("Not yet implemented")
    }
    override fun onActivityStarted(activity: Activity) {
        TODO("Not yet implemented")
    }
    override fun onActivityResumed(activity: Activity) {
        TODO("Not yet implemented")
    }
    override fun onActivityPaused(activity: Activity) {
        //在這進行彈框處理
    }
    override fun onActivityStopped(activity: Activity) {
        //在這進行彈框處理
    }
    override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
        TODO("Not yet implemented")
    }
    override fun onActivityDestroyed(activity: Activity) {
        TODO("Not yet implemented")
    }
}

可能會遇見的bug

permission denied for window type 2003

就是沒有動態申請權限導致的問題。

Android開發怎么實現Application跳出dialog

讀到這里,這篇“Android開發怎么實現Application跳出dialog”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

萨迦县| 铜山县| 石柱| 弥渡县| 富源县| 乐都县| 依兰县| 云南省| 崇礼县| 咸阳市| 报价| 泾川县| 兴国县| 宁晋县| 黄平县| 武义县| 黑水县| 房山区| 休宁县| 遂溪县| 金沙县| 新巴尔虎右旗| 德庆县| 都江堰市| 安泽县| 松江区| 湘潭市| 苍山县| 漳州市| 通化县| 永仁县| 海口市| 柘荣县| 班玛县| 资溪县| 莱芜市| 佛学| 阿坝县| 霍林郭勒市| 轮台县| 芦溪县|