单击通知时显示调用本地通知的内容页面

Posted

技术标签:

【中文标题】单击通知时显示调用本地通知的内容页面【英文标题】:Show contentpage that called local notification when notification is clicked 【发布时间】:2018-05-07 16:26:22 【问题描述】:

我对 Xamarin 比较陌生,并且已经在我的应用程序中达到了我想要收到通知的地步,我正在使用本地通知向用户显示他们收到了来自我的应用程序中某人的消息。虽然我可以显示通知,但当它单击时,它要么什么都不显示,要么“重新启动”应用程序(将用户带回登录页面)。

当点击通知时如何让通知显示设置页面,例如我的联系人页面?

【问题讨论】:

【参考方案1】:

当点击通知时如何让通知显示设置页面,例如我的联系人页面?

Xamarin.Forms只有一个activity,不管你创建了多少页面,都是在MainActivity上创建的。

但我们仍然可以找到解决方法:

    创建本地通知,以指示您要导航到哪个页面(Page1):

    Notification.Builder builder = new Notification.Builder(Xamarin.Forms.Forms.Context);
    Intent intent = new Intent(Xamarin.Forms.Forms.Context, typeof(MainActivity));
    Bundle bundle = new Bundle();
    // if we want to navigate to Page1:
    bundle.PutString("pageName", "Page1");
    intent.PutExtras(bundle);
    PendingIntent pIntent = PendingIntent.GetActivity(Xamarin.Forms.Forms.Context, 0, intent, 0);
    builder.SetContentTitle(title)
           .SetContentText(text)
           .SetSmallIcon(Resource.Drawable.icon)
           .SetContentIntent(pIntent);
    var manager = (NotificationManager)Xamarin.Forms.Forms.Context.GetSystemService("notification");
        manager.Notify(1, builder.Build());
    

    MainActivity.cs里面OnCreate我们使用反射来设置App的MainPage

    protected override void OnCreate(Bundle bundle)
    
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;
    
        base.OnCreate(bundle);
    
        global::Xamarin.Forms.Forms.Init(this, bundle);
        var myApp = new App();
        var mBundle = Intent.Extras;
        if (mBundle != null)
        
            var pageName = mBundle.GetString("pageName");
            if (!string.IsNullOrEmpty(pageName))
            
                //get the assemblyQualifiedName of page
                var pageAssemblyName = "Your_PCL_Name." + pageName+",Your_PCL_Name";
                Type type = Type.GetType(pageAssemblyName);
                if (type != null)
                
                    var currentPage = Activator.CreateInstance(type);
                    //set the main page
                    myApp.MainPage = (Page)currentPage;
                
    
            
        
    
        //load myApp
        LoadApplication(myApp);
    
    

注意:这个变通方法修改了你PCL的AppMainPage,如果你有这个属性的用法,请适当修改逻辑。

【讨论】:

以上是关于单击通知时显示调用本地通知的内容页面的主要内容,如果未能解决你的问题,请参考以下文章

iOS 10,当应用程序处于前台时显示本地通知?

本地通知在后台显示应用程序时显示 uialertview

如何在适用于 Android 和 cordova 的项目中单击通知时显示特定页面?

Xamarin IOS - 应用程序关闭时显示本地通知

如何使用 AFNetworking 3.0 在后台下载大文件并在会话完成所有任务时显示本地通知

从后台注册本地通知