首页 > 其他分享 >MAUI Blazor学习16-连续按BACK退出APP

MAUI Blazor学习16-连续按BACK退出APP

时间:2024-06-15 11:00:13浏览次数:6  
标签:16 APP BACK SunnyTrudeau MAUI Blazor com keyCode

MAUI Blazor学习16-连续按BACK退出APP

MAUI Blazor系列目录

  1. MAUI Blazor学习1-移动客户端Shell布局 - SunnyTrudeau - 博客园 (cnblogs.com)
  2. MAUI Blazor学习2-创建移动客户端Razor页面 - SunnyTrudeau - 博客园 (cnblogs.com)
  3. MAUI Blazor学习3-绘制ECharts图表 - SunnyTrudeau - 博客园 (cnblogs.com)
  4. MAUI Blazor学习4-绘制BootstrapBlazor.Chart图表 - SunnyTrudeau - 博客园 (cnblogs.com)
  5. MAUI Blazor学习5-BLE低功耗蓝牙 - SunnyTrudeau - 博客园 (cnblogs.com)
  6. MAUI Blazor学习6-扫描二维码 - SunnyTrudeau - 博客园 (cnblogs.com)
  7. MAUI Blazor学习7-实现登录跳转页面 - SunnyTrudeau - 博客园 (cnblogs.com)
  8. MAUI Blazor学习8-支持多语言 - SunnyTrudeau - 博客园 (cnblogs.com)
  9. MAUI Blazor学习9-VS Code开发调试MAUI入门 - SunnyTrudeau - 博客园 (cnblogs.com)
  10. MAUI Blazor学习10-BarcodeScanner扫描二维码 - SunnyTrudeau - 博客园 (cnblogs.com)
  11. MAUI Blazor学习11-百度地图定位 - SunnyTrudeau - 博客园 (cnblogs.com)
  12. MAUI Blazor学习12-文件另存为 - SunnyTrudeau - 博客园 (cnblogs.com)
  13. MAUI Blazor学习13-打开文件 - SunnyTrudeau - 博客园 (cnblogs.com)
  14. MAUI Blazor学习14-选择目录 - SunnyTrudeau - 博客园 (cnblogs.com)
  15. MAUI Blazor学习15-采用html2pdf.js生成pdf - SunnyTrudeau - 博客园 (cnblogs.com)

 

安卓APP一般都是连续按2次BACK键退出,MAUI Blazor可以判断当前导航页面如果为最后一个,就启动退出检测。网上有现成的例程,照抄即可。参考https://blog.csdn.net/sD7O95O/article/details/132632457,《MAUI APP 发布指南(三)vivo篇-CSDN博客.mhtml》

 在Platforms\Android\MainActivity.cs重载按键事件。

D:\Software\gitee\mauiblazorapp\MaBlaApp\Platforms\Android\MainActivity.cs

 

public class MainActivity : MauiAppCompatActivity
{
    private bool isExit = false;

    public override bool OnKeyDown([GeneratedEnum] Keycode keyCode, KeyEvent? e)
    {
        //最后一个页面按BACK才触发
        System.Diagnostics.Debug.WriteLine($"调用OnKeyDown, keyCode={keyCode} keyEvent={e}");

        if (keyCode == Keycode.Back)
        {
            var modelStack = Microsoft.Maui.Controls.Application.Current.MainPage.Navigation.ModalStack;
            if (modelStack.Count == 0)
            {
                if (isExit)
                {
                    //第2次返回键
                    Microsoft.Maui.Controls.Application.Current.Quit();
                }
                else
                {
                    //第一次返回键
                    isExit = true;
                    Task.Run(async () =>
                    {
                        await Task.Delay(2000);
                        isExit = false;
                    });
                    //用安卓的方法也可以
                    //new Android.OS.Handler().PostDelayed(() =>
                    //{
                    //    isExit = false;
                    //}, 2000);
                    Toast.MakeText(this, "再按一次退出", ToastLength.Long).Show();
                    return true;
                }
            }
        }

        return base.OnKeyDown(keyCode, e);
    }

    public override bool DispatchKeyEvent(KeyEvent? e)
    {
        //每次按BACK都触发
        System.Diagnostics.Debug.WriteLine($"调用DispatchKeyEvent, keyEvent={e}");

        return base.DispatchKeyEvent(e);
    }
}

 

测试的时候发现点击BACK回退页面时,触发了2次DispatchKeyEvent,按下和弹起,但是没有触发OnKeyDown,直到退回到最后一页,才会触发OnKeyDown。

【正常回退页面】

[0:] 调用DispatchKeyEvent, keyEvent=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0x48, repeatCount=0, eventTime=95052961, downTime=95052961, deviceId=-1, source=0x101, displayId=0 }

[0:] 调用DispatchKeyEvent, keyEvent=KeyEvent { action=ACTION_UP, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0x48, repeatCount=0, eventTime=95053063, downTime=95052961, deviceId=-1, source=0x101, displayId=0 }

 

【回退到最后一个页面】

[0:] 调用DispatchKeyEvent, keyEvent=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0x48, repeatCount=0, eventTime=95068879, downTime=95068879, deviceId=-1, source=0x101, displayId=0 }

[0:] 调用OnKeyDown, keyCode=Back keyEvent=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0x48, repeatCount=0, eventTime=95068879, downTime=95068879, deviceId=-1, source=0x101, displayId=0 }

[0:] 调用DispatchKeyEvent, keyEvent=KeyEvent { action=ACTION_UP, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0x48, repeatCount=0, eventTime=95069038, downTime=95068879, deviceId=-1, source=0x101, displayId=0 }

 

【回退到最后一个页面,快速2次BACK退出APP】

[0:] 调用DispatchKeyEvent, keyEvent=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0x48, repeatCount=0, eventTime=95094450, downTime=95094450, deviceId=-1, source=0x101, displayId=0 }

[0:] 调用OnKeyDown, keyCode=Back keyEvent=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0x48, repeatCount=0, eventTime=95094450, downTime=95094450, deviceId=-1, source=0x101, displayId=0 }

[0:] 调用DispatchKeyEvent, keyEvent=KeyEvent { action=ACTION_UP, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0x48, repeatCount=0, eventTime=95094575, downTime=95094450, deviceId=-1, source=0x101, displayId=0 }

[0:] 调用DispatchKeyEvent, keyEvent=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0x48, repeatCount=0, eventTime=95095075, downTime=95095075, deviceId=-1, source=0x101, displayId=0 }

[0:] 调用OnKeyDown, keyCode=Back keyEvent=KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_BACK, scanCode=0, metaState=0, flags=0x48, repeatCount=0, eventTime=95095075, downTime=95095075, deviceId=-1, source=0x101, displayId=0 }

 

DEMO代码地址:https://gitee.com/woodsun/mauiblazorapp

 

标签:16,APP,BACK,SunnyTrudeau,MAUI,Blazor,com,keyCode
From: https://www.cnblogs.com/sunnytrudeau/p/18249085

相关文章

  • 116. 小欧的卡牌(卡码网周赛第十七期(23年oppo提前批B组笔试真题))
    116.小欧的卡牌(卡码网周赛第十七期(23年oppo提前批B组笔试真题))题目描述小欧有n张卡牌,第i张卡牌的正面写了个数字ai,背面写了个数字bi。小欧对于每张卡牌可以选择一面向上,她希望最终向上的数字之和为3的倍数。你能告诉小欧有多少方案吗?由于答案过大,请对10^9+7......
  • 计算机毕业设计项目推荐,32762 外卖app系统设计与实现(开题答辩+程序定制+全套文案 )上万
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,餐饮外卖当然也不例外。外卖app系统主要功能模块包括后台首页,轮播图,资源管理(餐饮新闻,新闻分类),系统用户(注册用户,配送员,注册商家)模块管理(美食信息,外卖点餐,配......
  • GetMaterialApp组件
    文章目录1.知识回顾2.使用方法2.1源码分析2.2常用属性3.示例代码4.内容总结我们在上一章回中介绍了"Get包简介"相关的内容,本章回中将介绍GetMaterialApp组件.闲话休提,让我们一起TalkFlutter吧。1.知识回顾我们在上一章回中已经介绍过GetMaterialApp组件......
  • 新的MaterialApp组件
    文章目录1.知识回顾2.使用方法2.1源码分析2.2常用属性3.示例代码4.内容总结我们在上一章回中介绍了"Get包简介"相关的内容,本章回中将介绍GetMaterialApp组件.闲话休提,让我们一起TalkFlutter吧。1.知识回顾我们在上一章回中已经介绍过GetMaterialApp组件......
  • 「杂题乱刷」AT_abc161_d
    代码恢复训练2024.6.14.bfs板子题。链接(luogu)链接(atcoder)代码:点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?打cf不要用umap!!!记住,rating是身外之物。该冲正解时冲正解!Problem:算法:思......
  • 基于SpringBoot+Vue+uniapp微信小程序的垃圾分类系统的详细设计和实现(源码+lw+部署文
    文章目录前言详细视频演示项目运行截图技术框架后端采用SpringBoot框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • 1606 - 求一个两位数倒序的结果
    问题描述请输出一个两位的整数n,倒过来的数,也就是输出这个两位数个位和十位颠倒的结果。比如:整数23倒过来是32,整数18倒过来是81,整数20倒过来是2。输入两位整数n。输出n倒过来的整数。样例输入16输出61以下是C++实现的代码:代码1#include<iostream>u......
  • 4.16
    编写程序实现中文级联菜单,建议可以使用pypinyin或其它扩展库#一、定义菜单内容map_list={'C盘':{"program":{"MicrosoftOffice":\["IntegratedOffice.exe","OfficeClickToRun.exe"\],"MicrosoftSDKs":\[&quo......
  • uni-app项目button组件去不掉的灰色边框爬坑
    前情uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验非常棒,公司项目就是主推uni-app。坑位最近在开发个人中心的时候,需要用到微信头像和昵称的,微信的用户信息获取经过了几番调整,目前已不再提供获取用户头像和昵称的......
  • 195K数字音频接收器CS8416替代型号DP7416无需修改软硬件PIN对PIN兼容
    DP7416替代CS8416无需修改软硬件192K数字音频接收器产品特性支持EIAJCP1201、IEC-60958、AES3、S/PDIF8:2多路输入选择器32K到192KHz的采样频率支持差分和单端输入自动检测被压缩的输入音频数据流支持SPI和I2C通讯接口协议解码CD和Q-SubCodeDP7416是一款192K数......