首页 > 其他分享 >MAUI Blazor实战 - Android监听返回键

MAUI Blazor实战 - Android监听返回键

时间:2023-04-18 21:58:52浏览次数:59  
标签:返回 return NavigationManagerExtension 监听 DispatchKeyEvent UrList MAUI Blazor Andr

MAUI Blazor实战 - Android监听返回键


@

目录


前言

我们在MAUI Blazor项目中有时需要监听Android返回键,例如防止多次点击后退出应用、防止退回到特定页面、以及特定页面禁用退回功能等。

一、常规方法无效?

Activity中有两个可以重写的方法
1、直接监听返回健: 在MainActivity类中重写onBackPressed

        public override void OnBackPressed()
        {
            base.OnBackPressed();
        }

2、监听屏幕按键 :在MainActivity类中重写onKeyDown

        public override bool OnKeyDown(Keycode keyCode, KeyEvent e)
        {
            return base.OnKeyDown(keyCode, e);
        }

以上方法在Blazor项目中无效,因为webview会优先接管返回按钮的事件,并阻止向上传播到MainActivity中,可以通过不停按返回按钮的方式进行验证,只有当界面卡顿的时候,才可以在MainActivity中监听到OnKeyDown事件的,OnKeyUp事件虽然可以监听到,但是我们无法在OnKeyUp事件对返回行为进行阻止或干预。

二、使用DispatchKeyEvent

当键盘按下时,以此触发dispatchKeyEvent->onUserInteraction->onKeyDown
松开时:dispatchKeyEvent->onUserInteraction->onKeyUp

具体的事件分发机制可参考官方文档

https://developer.android.com/reference/android/app/Activity#dispatchKeyEvent(android.view.KeyEvent)

这里举一个具体例子

        public override bool DispatchKeyEvent(KeyEvent e) {
            if (e.KeyCode == Keycode.Back) {
                if (e.Action == KeyEventActions.Down) {
                    if (NavigationManagerExtension.UrList.Any()) {
                        var lastUrl = NavigationManagerExtension.UrList.Last();
                        var lastIndex = NavigationManagerExtension.UrList.Count - 1;
                        if (lastUrl.Contains("Login")) {
                            NavigationManagerExtension.UrList.Clear();
                            return false;
                        }
                        else {
                            NavigationManagerExtension.UrList.RemoveAt(lastIndex);
                        }
                    }
                    else {
                        return false;
                    }
                }
                else if (e.Action == KeyEventActions.Up) {
                    return false;
                }
            }

            return base.DispatchKeyEvent(e);
        }

我的路由信息记录在NavigationManagerExtension.UrList中,我希望做到
1、用户不要通过返回键退回到Login页面
2、用户切换账号登录的时候不能返回到上一个账户对应的页面
因为KeyDown 和KeyUp都会触发DispatchKeyEvent,所以我们需要在DispatchKeyEvent中通过e.KeyCodee.Action 来判断返回键按下的场景,然后判断上一个页面是否是Login,如果是就返回false进行阻止,如果UrList没有记录也进行阻止(切换用户会清空UrList),防止用户在切换账号过程后返回到上一个账户的页面。如果没有上述情景,就调用 return base.DispatchKeyEvent(e); 执行默认返回行为。

总结

经过测试有返回键的Andorid可以进行监听和阻止,没有返回键的使用返回手势也同样可以。

标签:返回,return,NavigationManagerExtension,监听,DispatchKeyEvent,UrList,MAUI,Blazor,Andr
From: https://www.cnblogs.com/sunday866/p/17331304.html

相关文章

  • MASA MAUI Plugin 集成个推,实现本地消息推送(六)【Android】篇
    MASAMAUIPlugin(六)集成个推,实现本地消息推送[Android]篇背景MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项目,意在对......
  • MASA MAUI Plugin 安卓蓝牙低功耗(二)蓝牙通讯
    MASAMAUIPlugin安卓蓝牙低功耗(二)蓝牙通讯项目背景MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项目,意在对微软MAUI的......
  • MASA MAUI Plugin IOS蓝牙低功耗(三)蓝牙扫描
    MASAMAUIPluginIOS蓝牙低功耗(三)蓝牙扫描项目背景MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项目,意在对微软MAUI的......
  • MASA MAUI Plugin (四)条形码、二维码扫描功能
    MASAMAUIPlugin(四)条形码、二维码扫描功能背景MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项目,意在对微软MAUI的补充......
  • MASA MAUI Plugin (十)iOS消息推送(原生APNS方式)
    MASAMAUIPlugin(十)iOS消息推送(原生APNS方式)背景MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项目,意在对微软MAUI的补......
  • MASA MAUI Plugin (七)应用通知角标Android+iOS
    MASAMAUIPlugin(七)应用通知角标(小红点)Android+iOS背景MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项目,意在对微软MAU......
  • MASA MAUI Plugin (九)Android相册多选照片(使用Android Jetpack套件库)
    MASAMAUIPlugin(九)Android相册多选照片(使用AndroidJetpack套件库)背景MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项......
  • MASA MAUI Plugin (八)Android相册多选照片(Intent 方式)
    MASAMAUIPlugin(八)Android相册多选照片(Intent方式)背景MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项目,意在对微软MA......
  • Android之AppWidget 开发浅析
    什么是AppWidgetAppWidget即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序,先看图:图中我用黄色箭头指示的即为AppWidget,一些用户使用比较频繁的程序,可以做成AppWidget,这样能方便地使用。典型的程序有时钟、天气、音乐播放......
  • Android 自定义View 之 圆环进度条
    圆环进度条前言正文一、XML样式二、构造方法三、测量四、绘制①绘制进度条背景②绘制进度③绘制文字五、API方法六、使用七、源码前言  很多时候我们会使用进度条,而Android默认的进度条是长条的,从左至右。而在日常开发中,有时候UI为了让页面更美观,就需要用到圆环进度条,那么本文......