Xamarin,如何在使用后清除intentExtra

时间:2017-09-25 15:59:56

标签: xamarin android-intent xamarin.forms

我的应用在特定时间显示通知。通知具有注释ID的待定意图。当用户点击通知时,此注释ID用于启动应用并加载带有来自通知的ID的注释。

基本上它工作正常但问题在用户使用“后退按钮”离开应用程序时启动。在下一个应用程序启动时,该笔记ID仍在内存中,应用程序再次将用户带到该笔记。

首次使用后如何从内存中清除该意图。

MainActivity.cs

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        public static Context AndroidContext { get; private set; }
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            //noteId is a id of Note thet notification was dispaly and tapped by user
            //Id is pass to xamarin PCL and proper note basic on this id is displayed

            int noteId = Intent.GetIntExtra("noteId", 0);

            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;   

            CalligraphyConfig.InitDefault(new CalligraphyConfig.Builder()
                   .SetDefaultFontPath("Dosis-Regular.ttf")
                   .SetFontAttrId(Resource.Attribute.fontPath)            
                   .Build()
                    );
            AndroidContext = this;
            global::Xamarin.Forms.Forms.Init(this, bundle);
            Xamarin.FormsGoogleMaps.Init(this, bundle);           

            LoadApplication(new App(noteId));    
        }

        protected override void AttachBaseContext(Context context)
        {
            base.AttachBaseContext(CalligraphyContextWrapper.Wrap(context));
        }
        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
        {
            PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }

    }

BroadcastReciver

class AlamReciver : BroadcastReceiver
    {
        public override void OnReceive(Context context, Intent intent)
        {
            int noteId = intent.GetIntExtra("id",0);
            var noteTitle = intent.GetStringExtra("title");
            var noteContent = intent.GetStringExtra("content");

            var resultIntent = new Intent(context, typeof(MainActivity));      
            resultIntent.PutExtra("noteId", noteId);           

            resultIntent.SetFlags(ActivityFlags.ClearTop | ActivityFlags.ClearTask);

            var PI = PendingIntent.GetActivity(context, noteId, resultIntent, PendingIntentFlags.OneShot);           

            var builder = new Notification.Builder(context)
                .SetContentTitle(noteTitle)
                .SetContentText(noteContent)                
                .SetSmallIcon(Resource.Drawable.ic_gnote_logo)
                .SetPriority(1)               
                .SetAutoCancel(true)
                .SetDefaults(NotificationDefaults.All)
                .SetContentIntent(PI);
            var notification = builder.Build();

            var manager = NotificationManager.FromContext(context);

            manager.Notify(noteId, notification);            

}     }

谢谢。

0 个答案:

没有答案