Android開發(fā)案例手冊Application跳出dialog
??實踐過程
??場景還原
線程中監(jiān)測和硬件的連接,在任何斷開的話需要彈出框給用戶選擇是否重新連接。
所以我們的思路就是不使用依托于Activity的Dialog,而是使用依托于Aplication的Dialog。
??開始
首先是動態(tài)申請權(quán)限
<!--這行代碼必須存在,否則點擊不了系統(tǒng)設(shè)置中的按鈕--> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>? <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
用戶不同意?那就用不了App就行了,我們一般都是如果沒給權(quán)限直接退出應(yīng)用。
現(xiàn)在哪個App不是必須要權(quán)限,看似允許用戶自主同意,但哪個不是拒絕后無法使用功能。
所以不用太糾結(jié)。
接著在硬件設(shè)備斷開連接的回調(diào)中處理
//設(shè)備斷開連接的回調(diào) isAutoConnectDlg是個dialog彈框
override fun onClientRemove(address: String?, alias: String?) { ??? //禁止外部點擊取消 ??? isAutoConnectDlg!!.setCanceledOnTouchOutside(false) ??? isAutoConnectDlg!!.setCancelable(false) ??? dlgWindows.setWindowAnimations(R.style.DialogRight) ??? //重要 設(shè)置彈框類型 ??? 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() }
之后在連接成功的回調(diào)中取消該彈框即可。
至此基本就可以了。但是還有個特殊情況,就是彈出框后用戶按下了Home也就是回到了桌面,或者是Android的后臺殺進程界面 都會造成該彈框顯示,影響不太好。
這時候就需要我們自定義Application,然后實現(xiàn)ActivityLifecycleCallbacks接口即可,該接口在Android 4.0 就已經(jīng)退出了,注冊后,所有的Activity生命周期都會回調(diào),方便監(jiān)聽處理業(yè)務(wù)。
因為進入后臺頁面,Activity的pause和stop這些就會執(zhí)行,我們每個Activity去監(jiān)聽不太合適,所以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
就是沒有動態(tài)申請權(quán)限導致的問題。
以上就是Android開發(fā)案例手冊Application跳出dialog的詳細內(nèi)容,更多關(guān)于Android開發(fā)Application跳出dialog的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Flutter網(wǎng)絡(luò)請求Dio庫的使用及封裝詳解
本文主要介紹了Flutter網(wǎng)絡(luò)請求Dio庫的使用及封裝詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-04-04Android selector狀態(tài)選擇器的使用詳解
這篇文章主要為大家詳細介紹了Android selector狀態(tài)選擇器的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-09-09Android自定義ProgressBar實現(xiàn)漂亮的進度提示框
這篇文章主要為大家詳細介紹了Android自定義ProgressBar實現(xiàn)漂亮的進度提示框,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-06-06RecyclerView+CardView實現(xiàn)橫向卡片式滑動效果
這篇文章主要為大家詳細介紹了RecyclerView+CardView實現(xiàn)橫向卡片式滑動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01flutter實現(xiàn)頁面多個webview的方案詳解
這篇文章主要為大家詳細介紹了flutter如何實現(xiàn)頁面多個webview的效果,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解下2023-09-09Android手把手教大家制作APP首頁(下拉刷新、自動加載)
這篇文章主要為大家詳細介紹了Android手把手教大家制作APP首頁,實現(xiàn)下拉刷新、自動加載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01