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

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

??開始
首先是動(dòng)態(tài)申請(qǐng)權(quán)限
<!--這行代碼必須存在,否則點(diǎn)擊不了系統(tǒng)設(shè)置中的按鈕--> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>? <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
用戶不同意?那就用不了App就行了,我們一般都是如果沒(méi)給權(quán)限直接退出應(yīng)用。
現(xiàn)在哪個(gè)App不是必須要權(quán)限,看似允許用戶自主同意,但哪個(gè)不是拒絕后無(wú)法使用功能。
所以不用太糾結(jié)。
接著在硬件設(shè)備斷開連接的回調(diào)中處理
//設(shè)備斷開連接的回調(diào) isAutoConnectDlg是個(gè)dialog彈框
override fun onClientRemove(address: String?, alias: String?) {
??? //禁止外部點(diǎn)擊取消
??? 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)中取消該彈框即可。
至此基本就可以了。但是還有個(gè)特殊情況,就是彈出框后用戶按下了Home也就是回到了桌面,或者是Android的后臺(tái)殺進(jìn)程界面 都會(huì)造成該彈框顯示,影響不太好。
這時(shí)候就需要我們自定義Application,然后實(shí)現(xiàn)ActivityLifecycleCallbacks接口即可,該接口在Android 4.0 就已經(jīng)退出了,注冊(cè)后,所有的Activity生命周期都會(huì)回調(diào),方便監(jiān)聽處理業(yè)務(wù)。
因?yàn)檫M(jìn)入后臺(tái)頁(yè)面,Activity的pause和stop這些就會(huì)執(zhí)行,我們每個(gè)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) {
??????? //在這進(jìn)行彈框處理
??? }
??? override fun onActivityStopped(activity: Activity) {
??????? //在這進(jìn)行彈框處理
??? }
??? override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
??????? TODO("Not yet implemented")
??? }
??? override fun onActivityDestroyed(activity: Activity) {
??????? TODO("Not yet implemented")
??? }
}
??可能會(huì)遇見的bug
permission denied for window type 2003
就是沒(méi)有動(dòng)態(tài)申請(qǐng)權(quán)限導(dǎo)致的問(wèn)題。

以上就是Android開發(fā)案例手冊(cè)Application跳出dialog的詳細(xì)內(nèi)容,更多關(guān)于Android開發(fā)Application跳出dialog的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
AndroidStudio修改Code Style來(lái)格式化自定義標(biāo)簽的xml文件方式
這篇文章主要介紹了AndroidStudio修改Code Style來(lái)格式化自定義標(biāo)簽的xml文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
Android studio保存logcat日志到本地的操作
這篇文章主要介紹了Android studio保存logcat日志到本地的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
Android viewpage實(shí)現(xiàn)可控制的禁止滑動(dòng)
這篇文章主要為大家詳細(xì)介紹了Android viewpage實(shí)現(xiàn)可控制的禁止滑動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
Android仿簡(jiǎn)書長(zhǎng)按文章生成圖片效果
使用簡(jiǎn)書APP的同學(xué)都知道,簡(jiǎn)書有這樣一個(gè)功能;文章頁(yè)長(zhǎng)按內(nèi)容時(shí)底部會(huì)出現(xiàn)一個(gè) 生成圖片分享 的按鈕,點(diǎn)擊之后就可以將當(dāng)前的文章生成一張長(zhǎng)圖片;這張圖片可以保存到本地或分享給好友,同時(shí)還可為圖片設(shè)置成為白和黑兩種風(fēng)格,很有藝術(shù)范2017-03-03
Android實(shí)現(xiàn)圖片添加陰影效果的2種方法
這篇文章主要介紹了Android實(shí)現(xiàn)圖片添加陰影效果的2種方法,第一種方法是自定義drawable,第二種方式就是自定義view,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
使用TransitionDrawable實(shí)現(xiàn)多張圖片淡入淡出效果
這篇文章主要為大家詳細(xì)介紹了使用TransitionDrawable實(shí)現(xiàn)多張圖片淡入淡出效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08
Android 坐標(biāo)系與視圖坐標(biāo)系圖解分析
下面小編就為大家?guī)?lái)一篇Android 坐標(biāo)系與視圖坐標(biāo)系圖解分析。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
Android編程之ProgressBar圓形進(jìn)度條顏色設(shè)置方法
這篇文章主要介紹了Android編程之ProgressBar圓形進(jìn)度條顏色設(shè)置方法,涉及ProgressBar布局及屬性設(shè)置相關(guān)操作技巧,需要的朋友可以參考下2017-02-02
利用Android畫圓弧canvas.drawArc()實(shí)例詳解
這篇文章主要給大家介紹了關(guān)于利用Android畫圓弧canvas.drawArc()的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的理解和學(xué)習(xí)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11

