Android開發(fā)案例手冊Application跳出dialog

??實踐過程
??場景還原
線程中監(jiān)測和硬件的連接,在任何斷開的話需要彈出框給用戶選擇是否重新連接。
所以我們的思路就是不使用依托于Activity的Dialog,而是使用依托于Aplication的Dialog。

??開始
首先是動態(tài)申請權限
<!--這行代碼必須存在,否則點擊不了系統(tǒng)設置中的按鈕--> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>? <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
用戶不同意?那就用不了App就行了,我們一般都是如果沒給權限直接退出應用。
現(xiàn)在哪個App不是必須要權限,看似允許用戶自主同意,但哪個不是拒絕后無法使用功能。
所以不用太糾結。
接著在硬件設備斷開連接的回調(diào)中處理
//設備斷開連接的回調(diào) 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()
}
之后在連接成功的回調(diào)中取消該彈框即可。
至此基本就可以了。但是還有個特殊情況,就是彈出框后用戶按下了Home也就是回到了桌面,或者是Android的后臺殺進程界面 都會造成該彈框顯示,影響不太好。
這時候就需要我們自定義Application,然后實現(xiàn)ActivityLifecycleCallbacks接口即可,該接口在Android 4.0 就已經(jīng)退出了,注冊后,所有的Activity生命周期都會回調(diào),方便監(jiān)聽處理業(yè)務。
因為進入后臺頁面,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)申請權限導致的問題。

以上就是Android開發(fā)案例手冊Application跳出dialog的詳細內(nèi)容,更多關于Android開發(fā)Application跳出dialog的資料請關注腳本之家其它相關文章!
相關文章
AndroidStudio修改Code Style來格式化自定義標簽的xml文件方式
這篇文章主要介紹了AndroidStudio修改Code Style來格式化自定義標簽的xml文件方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Android studio保存logcat日志到本地的操作
這篇文章主要介紹了Android studio保存logcat日志到本地的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Android viewpage實現(xiàn)可控制的禁止滑動
這篇文章主要為大家詳細介紹了Android viewpage實現(xiàn)可控制的禁止滑動,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11
使用TransitionDrawable實現(xiàn)多張圖片淡入淡出效果
這篇文章主要為大家詳細介紹了使用TransitionDrawable實現(xiàn)多張圖片淡入淡出效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08
Android編程之ProgressBar圓形進度條顏色設置方法
這篇文章主要介紹了Android編程之ProgressBar圓形進度條顏色設置方法,涉及ProgressBar布局及屬性設置相關操作技巧,需要的朋友可以參考下2017-02-02
利用Android畫圓弧canvas.drawArc()實例詳解
這篇文章主要給大家介紹了關于利用Android畫圓弧canvas.drawArc()的相關資料,文中通過示例代碼介紹的非常詳細,對大家的理解和學習具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2017-11-11

