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

Android 12升级到Android 13后Xamarin.Android Intent跳转失效问题

解决Android 13下跳转Marvel Unlimited指定漫画的ActivityNotFoundException问题

问题根源

Android 13对Intent匹配规则做了更严格校验:

  • GetLaunchIntentForPackage返回的是绑定了Marvel Unlimited启动Activity的显式Intent
  • 调用SetData和AddFlags(ActivityFlags.ClearTop)后,该Intent的Action会默认变为ACTION_VIEW,但对应启动Activity的intent-filter并未声明支持处理传入的漫画Uri,导致系统找不到符合条件的Activity,抛出异常。

修复方案

不要复用启动Intent,直接创建隐式ACTION_VIEW Intent,指定Uri并限制包名为Marvel Unlimited,确保仅唤起目标应用处理该链接:

string MarvelUnlimitedPackage = "com.marvel.unlimited";
Android.Content.Intent targetAppIntent = new Android.Content.Intent(Android.Content.Intent.ActionView);
targetAppIntent.SetData(Android.Net.Uri.Parse(item.ReadUrl));
// 限制仅Marvel Unlimited应用处理该Intent
targetAppIntent.SetPackage(MarvelUnlimitedPackage);
// 添加必要的Flag
targetAppIntent.AddFlags(ActivityFlags.ClearTop | ActivityFlags.NewTask);

// 先检查是否有应用能处理这个Intent,避免崩溃
if (context.PackageManager.ResolveActivity(targetAppIntent, Android.Content.PM.PackageManager.MatchDefaultOnly) != null)
{
    ComicListAdapter.UpdateIsReadStatus(item.Id, true);
    context.StartActivity(targetAppIntent);
}
else
{
    Toast.MakeText(context, "something went wrong, is MU installed?", ToastLength.Short).Show();
}

额外说明

  • 注释掉SetData和AddFlags能正常打开,是因为此时用的是原始启动Intent,仅启动应用首页,不涉及Uri匹配
  • 加入ResolveActivity检查可提前判断目标应用是否能处理该Uri,避免直接调用StartActivity抛出异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:32:53