2017-03-08 1 views
1

Ich verwende diesen Code, um Benachrichtigungen in der Benachrichtigungsleiste anzuzeigen. Wenn auf die Benachrichtigung geklickt wird, wird die Hauptaktivität gestartet. Ist es möglich, das Ansichtsmodell anstelle von Aktivitäten in der Xamarin-Formularanwendung mit MvvmCross zu starten?Xamarin bildet offenes Ansichtsmodell bei Benachrichtigung Tippen Sie auf

Intent notificationIntent = new Intent(context,typeof(MainActivity)); 
    notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |        Intent.FLAG_ACTIVITY_SINGLE_TOP);  
    PendingIntent pIntent = PendingIntent.getActivity(context, code, 
      notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    NotificationManager manager = (NotificationManager) context 
      .getSystemService(Context.NOTIFICATION_SERVICE); 
    NotificationCompat.Builder notify = new NotificationCompat.Builder(
      context); 

    notify.setContentIntent(pIntent); 
    notify.setSmallIcon(R.drawable.app_icon); 
    notify.setContentTitle(“Title”); 
    manager.notify(reqCode, notify.build()); 

Antwort

0

Meine Idee war, mit MessagingCenter Verwendung von PutExtra in Kombination zu machen.

Zuerst Sie zeigen die Benachrichtigung in der Benachrichtigungsleiste:

Intent intent = new Intent(Forms.Context, typeof(MainActivity)); 
if (openPage) 
{ 
    intent.SetFlags(ActivityFlags.SingleTop); 
    intent.PutExtra("OpenPage", "SomePage"); 
} 

const int pendingIntentId = 0; 
PendingIntent pendingIntent = PendingIntent.GetActivity(Forms.Context, pendingIntentId, intent, PendingIntentFlags.OneShot); 

var nMgr = (NotificationManager)Android.App.Application.Context.GetSystemService(Context.NotificationService); 
Notification.Builder notBuilder = new Notification.Builder(Android.App.Application.Context) 
    .SetContentIntent(pendingIntent) 
    .SetContentTitle("SomeApp") 
    .SetContentText(message) 
    .SetDefaults(NotificationDefaults.Sound | NotificationDefaults.Vibrate) 
    .SetSmallIcon(Resource.Drawable.ic_launcher) 
    .SetAutoCancel(true); 

var notification = notBuilder.Build(); 
nMgr.Notify(0, notification); 

In MainActivity.cs Sie für den zusätzlichen Inhalt überprüfen:

protected override void OnNewIntent(Intent intent) 
{ 
    // Send message to the PCL (XF) if a certain page should be opened. 
    if (intent.HasExtra("OpenPage")) 
    { 
     string pageName = intent.GetStringExtra("OpenPage") ?? "None"; 

     if (pageName != "None") 
     { 
      var message = new OpenPageMessage { PageName = pageName }; 
      MessagingCenter.Send(message, Message.Msg_OpenPage); 
     } 
    } 

    base.OnNewIntent(intent); 
} 

Und Ihre zentrale Navigations Instanz (zB MainPage), abonniert diese Nachricht:

MessagingCenter.Subscribe<Message.OpenPageMessage>(this, Message.Msg_OpenPage, (async) message => 
{ 
    // Loads a certain page if a message is received 

    switch (message.PageName) 
    { 
     case "SomePage": 
      await Navigation.PushModalAsync(new SomePage(), true); 
      break; 
     default: 
      break; 
    } 
}); 

Zusätzlich ist hier mein Message.cs:

public class Message 
{ 
    public const string Msg_OpenPage = "OpenPage"; 

    public class OpenPageMessage { 
     public string PageName { get; set; } 
    } 
} 

Mit Hilfe dieser source.

bearbeiten

Es gibt Probleme, wenn Sie mehrere Push-Benachrichtigungen zu einer Zeit haben, wo notfications wo überschrieben. Man könnte einen anderen requestCode verwenden oder FLAG_UPDATE_CURRENT verwenden.

+0

Hallo, ich habe 'put extra' verwendet, um auf bestimmte Seite zu navigieren, während der Benutzer auf die Push-Benachrichtigung klickt, aber eine Bedingung ist fehlgeschlagen. Ich habe zwei Arten von Benachrichtigungen, nämlich 1. Bestellung 2. Überprüfung. Wenn Auftragstypbenachrichtigung Ich habe Auftrag hinzufügen, um extra zu setzen, und wenn Benachrichtigung erhalten Benachrichtigung habe ich Rezension hinzufügen, um extra zu setzen, aber wenn ich auf Bestellungsbenachrichtigung klicken, ist es Absicht zeigen "überprüfen" Extras. Es speichert den letzten Benachrichtigungstyp. Wie kann das behoben werden? – Deepak

+0

Ich denke, es ist besser, dass Sie eine neue Frage dafür erstellen, wo Sie besser beschreiben (z. B. mit Ihrem Code), was Sie wollen und wo Ihr Problem ist. Ich habe nur einen Benachrichtigungstyp verwendet, daher kann ich Ihr Problem derzeit nicht reproduzieren. – testing

+0

Okay, danke. – Deepak

Verwandte Themen