返回顶部
首页 > 资讯 > 移动开发 >Android开发案例手册Application跳出dialog
  • 824
分享到

Android开发案例手册Application跳出dialog

2024-04-02 19:04:59 824人浏览 独家记忆
摘要

目录?实践过程?场景还原?开始?可能会遇见的bug ?实践过程 ?场景还原 线程中监测和硬件的连接,在任何断开的话需要弹出框给用户选择是否重新连接。 所以我们的思路就是不使用依托于A

?实践过程

?场景还原

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

所以我们的思路就是不使用依托于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的资料请关注编程网其它相关文章!

--结束END--

本文标题: Android开发案例手册Application跳出dialog

本文链接: https://lsjlt.com/news/150908.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作