Как активировать действие с использованием локального уведомления, созданного из удаленного уведомления

Я успешно создал локальное уведомление, которое запускает действие, но по какой-то причине, когда это локальное уведомление создается из обработчика удаленного уведомления, действие не запускается, когда локальное уведомление используется пользователем. Похоже, что ошибка или исключение не выбрасываются.

Ниже приведен код, создающий локальное уведомление. Примечание. Я использую Xamarin. Интересно, возможно ли это как-то связать разрешения (удаленные обработчики уведомлений, возможно, не могут создавать намерения для запуска действий?).

private void CreateNotification(string title, string desc) {
    var uiIntent = new Intent(this, typeof(ConversationActivity));

    var stackBuilder = TaskStackBuilder.Create(this);
    stackBuilder.AddParentStack(Java.Lang.Class.FromType(typeof(ConversationActivity)));
    stackBuilder.AddNextIntent(uiIntent);

    PendingIntent pendingIntent = stackBuilder.GetPendingIntent(0, (int)PendingIntentFlags.UpdateCurrent);

    var notification = new NotificationCompat.Builder(this)
        .SetAutoCancel(true) // Remove the notification once the user touches it
        .SetContentIntent(pendingIntent)
        .SetContentTitle(title)
        .SetSmallIcon(Resource.Drawable.AppIcon)
        .SetContentText(desc)
        .SetDefaults((int)(NotificationDefaults.Sound | NotificationDefaults.Vibrate))
        ;

    // Set the notification info
    // we use the pending intent, passing our ui intent over which will get called
    // when the notification is tapped.
    var notificationManager = GetSystemService(Context.NotificationService) as NotificationManager;
    notificationManager.Notify(1, notification.Build());
}

Ответ 1

Я все еще не уверен, что случилось с моей первоначальной попыткой, но я выяснил, что могу исправить это, изменив Intent на использование имени компонента вместо действия или вида деятельности:

    private void SendNotification() {
        var nMgr = (NotificationManager)this.GetSystemService(NotificationService);
        var notification = new Notification(Resource.Drawable.AppIcon, "Incoming Dart");
        var intent = new Intent();
        intent.SetComponent(new ComponentName(this, "dart.androidapp.ContactsActivity"));
        var pendingIntent = PendingIntent.GetActivity(this, 0, intent, 0);
        notification.SetLatestEventInfo(this, "You've got something to read", "You have received a message", pendingIntent);
        nMgr.Notify(0, notification);
    }

Ответ 2

Вы должны иметь возможность вызвать его с помощью typeof (...). Код, который вы опубликовали, сильно отличается от последнего. Попробуйте, если это сработает для вас:

private void SendNotification() 
{
    var nMgr = (NotificationManager)this.GetSystemService(NotificationService);
    var notification = new Notification(Resource.Drawable.AppIcon, "Incoming Dart");
    var intent = new Intent(this, typeof(ContactsActivity));
    //intent.SetComponent(new ComponentName(this, "dart.androidapp.ContactsActivity"));
    var pendingIntent = PendingIntent.GetActivity(this, 0, intent, 0);
    notification.SetLatestEventInfo(this, "You've got something to read", "You have received a message", pendingIntent);
    nMgr.Notify(0, notification);
}

Ответ 3

Привет, Андрей для меня, рев, отлично работает

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification = new Notification(R.drawable.ic_launcher, "Hello Chitta!", System.currentTimeMillis());
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("message/rfc822");
        intent.putExtra(Intent.EXTRA_EMAIL  , new String[]{"[email protected]"});
        intent.putExtra(Intent.EXTRA_SUBJECT, "Hello CR!");
        intent.putExtra(Intent.EXTRA_TEXT   , "This is the body of email");

        PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
        notification.setLatestEventInfo(getApplicationContext(), "Send an e-mail", "Ha ha", pendingIntent);
        notificationManager.notify(742134, notification);

Говорят о чем-то еще?