Android開發案例手冊Application跳出dialog
👉實踐過程
😜場景還原
線程中監測和硬件的連接,在任何斷開的話需要彈出框給用戶選擇是否重新連接。
所以我們的思路就是不使用依托於Activity的Dialog,而是使用依托於Aplication的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的資料請關註WalkonNet其它相關文章!