Android开发怎么实现Application跳出dialog(android,application,dialog,开发技术)

时间:2024-05-04 12:54:24 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

实践过程

场景还原

线程中监测和硬件的连接,在任何断开的话需要弹出框给用户选择是否重新连接。

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

Android开发怎么实现Application跳出dialog

开始

首先是动态申请权限

<!--这行代码必须存在,否则点击不了系统设置中的按钮--><uses-permissionandroid:name="android.permission.SYSTEM_ALERT_WINDOW"/><uses-permissionandroid:name="android.permission.SYSTEM_OVERLAY_WINDOW"/>

用户不同意?那就用不了App就行了,我们一般都是如果没给权限直接退出应用。

现在哪个App不是必须要权限,看似允许用户自主同意,但哪个不是拒绝后无法使用功能。

所以不用太纠结。

接着在硬件设备断开连接的回调中处理

//设备断开连接的回调 isAutoConnectDlg是个dialog弹框

overridefunonClientRemove(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是很好的选择。

classMyApp:Application(),Application.ActivityLifecycleCallbacks{overridefunonCreate(){super.onCreate()registerActivityLifecycleCallbacks(this)}overridefunonActivityCreated(activity:Activity,savedInstanceState:Bundle?){TODO("Notyetimplemented")}overridefunonActivityStarted(activity:Activity){TODO("Notyetimplemented")}overridefunonActivityResumed(activity:Activity){TODO("Notyetimplemented")}overridefunonActivityPaused(activity:Activity){//在这进行弹框处理}overridefunonActivityStopped(activity:Activity){//在这进行弹框处理}overridefunonActivitySaveInstanceState(activity:Activity,outState:Bundle){TODO("Notyetimplemented")}overridefunonActivityDestroyed(activity:Activity){TODO("Notyetimplemented")}}

可能会遇见的bug

permission denied for window type 2003

就是没有动态申请权限导致的问题。

Android开发怎么实现Application跳出dialog

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Android开发怎么实现Application跳出dialog的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Vue前端项目自适应布局怎么实现下一篇:

5 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18