如何从MainActivity.cs向App.cs的OnResume方法传递notificationId参数
实现步骤
- 步骤1:在
MainActivity.cs中获取notificationId并传递给App实例
如果你是从通知点击事件获取该参数,可在OnCreate(冷启动场景)和OnNewIntent(应用已在后台运行场景)中取出Intent携带的参数,再传给App类:protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // 冷启动时从Intent取参数,默认值可根据业务自定义 int notificationId = Intent.GetIntExtra("notification_id", -1); LoadApplication(new App(notificationId)); } protected override void OnNewIntent(Intent intent) { base.OnNewIntent(intent); // 应用在后台时点击通知取参数 if (intent.HasExtra("notification_id")) { int notificationId = intent.GetIntExtra("notification_id", -1); var currentApp = (App)Application.Current; currentApp.OnResume(notificationId); } } - 步骤2:调整
App.cs的逻辑接收参数
你可以通过构造函数传参接收冷启动场景的id,也可以直接调用你定义的带参OnResume方法:private int _initNotificationId; // 构造函数接收冷启动时传入的id public App(int notificationId) { InitializeComponent(); _initNotificationId = notificationId; } // 系统默认的OnResume回调,应用从后台恢复时触发 protected override void OnResume() { base.OnResume(); // 传入初始化时保存的id,你也可以根据业务逻辑调整这里的取值 OnResume(_initNotificationId); } // 你自定义的带参方法,改为public允许外部调用 public void OnResume(int notificationId) { // 增加无效值判断,避免报错 if(notificationId >= 0) { MainPage = new AppShell(notificationId); } }
注意事项
- 你发送通知时给PendingIntent绑定的Intent,需要和上面代码里取值的Extra key保持一致,示例中用的key是
notification_id,你可以根据自己的业务修改 - 拿到id后先做有效性校验,避免传入默认值触发无效的数据库查询
内容的提问来源于stack exchange,提问作者alexandr f
相关产品推荐
相关产品推荐

