You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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能正常打开邮件:
    <HyperlinkButton 
        NavigateUri="mailto:example@example.com">
        <TextBlock Text="Contact via e-mail"/>
    </HyperlinkButton>
    
    这说明问题出在Xamarin.Essentials本身,而非仅邮件功能。

需求

我希望在ViewModel的SendReport方法内解决该问题,不想改用UI层的HyperlinkButton。查阅Android 13行为变更文档未发现相关内容,iOS端功能正常。尝试过System.Diagnostics.Process.Start也无效,且因环境不稳定,尽量避免进行版本更新操作。请问该如何解决?


内容的提问来源于stack exchange,提问作者jaakko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 21:15:12