Android 13下Uno Platform应用调用Xamarin.Essentials崩溃如何解决?
Android 13下Xamarin.Essentials启动外部应用崩溃问题
场景与问题
我在Uno Platform(基于Xamarin)的Android移动应用中,要实现用户点击按钮后打开预填充主题和正文的邮件,自动化完成报告提交流程。应用采用MVVM架构,视图中的按钮绑定到ViewModel内的命令,该命令拼接内容后尝试调用邮件应用。
自Android 13起,以下代码会导致应用持续崩溃(此前版本无此问题):
var message = new Xamarin.Essentials.EmailMessage { Subject = Report.SUBJECT, Body = Report.DATA, To = new List<string> { Report.RECIPIENT }, // "example@example.com" }; await Xamarin.Essentials.Email.ComposeAsync(message);
堆栈跟踪信息:
ApplicationActivity+<>c__DisplayClass29_0.<SetContentView>b__0 (System.Object s, Android.Views.View+ViewAttachedToWindowEventArgs e) System.NullReferenceException: Object reference not set to an instance of an object
奇怪的是,调试确认message不为null,且应用崩溃后,目标邮件应用中能正确生成预填内容(手动打开邮件应用可见)。
环境信息
- 应用最低兼容Android 9(API 28),目标版本Android 11(API 30)
- 使用.NET Core SDK 6.0.101、.NET Core Runtime 6.0.1
- 开发环境:Visual Studio 2019 for Mac社区版8.10.22(build 11)
已尝试的无效方案
- 替换为Launcher.OpenAsync仍崩溃:
甚至打开普通网站也会触发同样崩溃:var uri = $"mailto:{Report.RECIPIENT}?subject={Report.SUBJECT}&body={Report.DATA}"; await Xamarin.Essentials.Launcher.OpenAsync(uri);var uri = "https://example.com"; await Xamarin.Essentials.Launcher.OpenAsync(uri); - try-catch无法捕获异常:用try-catch包裹整个方法,应用依然崩溃:
private async void SendReport() { try { // 执行邮件调用逻辑 } catch (Exception ex) { // 异常处理代码 } } - HyperlinkButton可正常工作:应用内其他位置使用视图级的HyperlinkButton能正常打开邮件:
这说明问题出在Xamarin.Essentials本身,而非仅邮件功能。<HyperlinkButton NavigateUri="mailto:example@example.com"> <TextBlock Text="Contact via e-mail"/> </HyperlinkButton>
需求
我希望在ViewModel的SendReport方法内解决该问题,不想改用UI层的HyperlinkButton。查阅Android 13行为变更文档未发现相关内容,iOS端功能正常。尝试过System.Diagnostics.Process.Start也无效,且因环境不稳定,尽量避免进行版本更新操作。请问该如何解决?
内容的提问来源于stack exchange,提问作者jaakko
相关产品推荐
相关产品推荐

