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
相关产品推荐
相关产品推荐

