第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Xamarin Android 從通知中取消任務(wù)

Xamarin Android 從通知中取消任務(wù)

C#
猛跑小豬 2023-08-20 14:29:14
我有一個(gè)方法,可以在每個(gè) TimeSpan 間隔向用戶發(fā)送一次本地通知:public async void GetVehiclePositionRepeatAsync(TimeSpan interval, CancellationToken cancellationToken)    {        while (true)        {            var task = new Task(() =>             {                cancellationToken.ThrowIfCancellationRequested();                var not = new PushNotificationGenerator(this, "Hooray!", "yay", "STOP_NOTIFICATIONS");                        not.Push();            });            task.Start();            await Task.Delay(interval, cancellationToken);        }    }我的目標(biāo)是在通知上有兩個(gè)選項(xiàng);將消除當(dāng)前通知,但允許此任務(wù)繼續(xù)運(yùn)行。對(duì)方會(huì)取消這個(gè)任務(wù)。這是 PushNotificationGenerator 類:public class PushNotificationGenerator{    public MapActivity Activity { get; set; }    public string Title { get; set; }    public string Text { get; set; }    public string ChannelId { get; set; }    public PushNotificationGenerator(MapActivity act, string title, string txt, string channelId)    {        Activity = act;        Title = title;        Text = txt;        ChannelId = channelId;    }    public void Push()    {        var resultIntent = new Intent();        resultIntent.SetAction("Dismiss");        var stackBuilder = TaskStackBuilder.Create(Activity);        stackBuilder.AddParentStack(Class.FromType(typeof(MapActivity)));        stackBuilder.AddNextIntent(resultIntent);        var resultPendingIntent = stackBuilder.GetPendingIntent(0, (int)PendingIntentFlags.UpdateCurrent);        var builder = new NotificationCompat.Builder(Activity, ChannelId)                      .SetAutoCancel(true)                      .SetContentTitle(Title)                      .SetSmallIcon(Resource.Drawable.stop_bus)                      .SetContentText(Text)                      .AddAction(0, "Dont Dismiss", resultPendingIntent)                      .AddAction(0, "Dismiss", resultPendingIntent);        var notificationManager = NotificationManagerCompat.From(Activity);        notificationManager.Notify(41144, builder.Build());    }}我不知道如何使用通知中的 CancellationToken 。
查看完整描述

1 回答

?
Cats萌萌

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊

首先在你的Push方法中:


public void Push()

{

    ...

    Intent intentDismiss = new Intent(this, typeof(NotivicationBroadCast));

    intentDismiss.SetAction("notification_dismiss");

    PendingIntent pendingIntentDismiss = PendingIntent.GetBroadcast(this, 0,

    intentDismiss, PendingIntentFlags.UpdateCurrent);


    Intent intentCancel = new Intent(this, typeof(NotivicationBroadCast));

    intentCancel.SetAction("notification_cancel");

    PendingIntent pendingIntentCancel = PendingIntent.GetBroadcast(this, 0,

    intentCancel, PendingIntentFlags.UpdateCurrent);


    var builder = new NotificationCompat.Builder(Activity, ChannelId)

                  .SetAutoCancel(true)

                  .SetContentTitle(Title)

                  .SetSmallIcon(Resource.Drawable.stop_bus)

                  .SetContentText(Text)

                  .AddAction(0, "Dont Dismiss", pendingIntentDismiss)

                  .AddAction(0, "Dismiss", pendingIntentCancel );


    var notificationManager = NotificationManagerCompat.From(Activity);

    notificationManager.Notify(41144, builder.Build());

}

在GetVehiclePositionRepeatAsync方法中:


public async void GetVehiclePositionRepeatAsync(TimeSpan interval, CancellationToken cancellationToken)

{

        while (!cancellationToken.IsCancellationRequested) { 

            var task = new Task(() =>

            {

                cancellationToken.Token.ThrowIfCancellationRequested();

                var not = new PushNotificationGenerator(this, "Hooray!", "yay", "STOP_NOTIFICATIONS");

                not.Push();

            },cancellationToken.Token);

            task.Start();

            await Task.Delay(interval);

        }

    }

}

然后自定義NotivicationBroadCast:


[BroadcastReceiver]

class NotivicationBroadCast : BroadcastReceiver

{

    public override void OnReceive(Context context, Intent intent)

    {

        string action = intent.Action;

        if (action.Equals("notification_dismiss"))

        {

             NotificationManager notificationManager = (NotificationManager)context.GetSystemService(Context.NotificationService);            

             notificationManager.Cancel(notificationId);

        }

        if (action.Equals("notification_cancel"))

        {              

            cancellationToken.Cancel();

        }

    }

}

不要忘記在活動(dòng)中注冊(cè)接收器:


protected override void OnResume()

    {

        base.OnResume();

        NotivicationBroadCast recieve = new NotivicationBroadCast();

        IntentFilter intentFilter = new IntentFilter();

        intentFilter.AddAction("notification_dismiss");

        intentFilter.AddAction("notification_cancel");

        RegisterReceiver(recieve, intentFilter);

        begin();

    }


查看完整回答
反對(duì) 回復(fù) 2023-08-20
  • 1 回答
  • 0 關(guān)注
  • 122 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)