2017-01-14 3 views
0

Я хотел бы создать уведомление в своем приложении, которое будет отображаться через 10 секунд. Он работает хорошо, когда приложение запущено, но когда я закрываю приложение, уведомление не отображается. Вот мой код:Android Xamarin - уведомление о закрытом приложении

Моя служба уведомления:

[Service] 
class NotifyEvent : IntentService 
{ 
    protected override void OnHandleIntent(Intent intent) 
    { 

     PendingIntent pIntent = PendingIntent.GetActivity(this, 0, intent, 0); 

     Notification.Builder builder = new Notification.Builder(this); 
     builder.SetContentTitle(Resources.GetString(Resource.String.NotifikaceNadpis)); 
     builder.SetContentText(Resources.GetString(Resource.String.NotifikaceText)); 
     builder.SetSmallIcon(Resource.Drawable.Icon); 
     builder.SetPriority(1); 
     builder.SetDefaults(NotificationDefaults.Sound | NotificationDefaults.Vibrate); 
     builder.SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis()); 
     Notification notifikace = builder.Build(); 

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

     const int notificationId = 0; 
     notificationManager.Notify(notificationId, notifikace); 
    } 
} 

Класс, который начинает уведомления:

public class Notificator 
{ 
    public void ShowNotification(Context context) 
    { 
     Intent intent = new Intent(context, typeof(NotifyEvent)); 
     var pendingServiceIntent = PendingIntent.GetService(context, 0, intent, PendingIntentFlags.UpdateCurrent); 

     AlarmManager alarm = (AlarmManager)context.GetSystemService(Context.AlarmService); 

     alarm.Set(AlarmType.ElapsedRealtimeWakeup, SystemClock.ElapsedRealtime() + 10000, pendingServiceIntent); 
    } 
} 

метод в деятельности:

Notificator not = new Notificator(); 
not.ShowNotification(this); 

Моя активность:

[Activity(Label = "Nastavení")] 
public class SettingsActivity : Activity 
{ 
    protected override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 

     // Create your application here 
     SetContentView(Resource.Layout.Settings); 
     Button vynulovatButton = FindViewById<Button>(Resource.Id.buttonRestartDne); 

     vynulovatButton.Click += VynulovatDen; 

    } 

    ... 

    protected void VynulovatDen(object sender, EventArgs e) 
    { 
     Notificator not = new Notificator(); 
     not.ShowNotification(this); 
    } 
} 

Благодарим за любую помощь.

+0

добавить codefor активность. –

+0

Код объявления действителен –

ответ

0

вы можете попробовать это.

protected override void OnDestroy() 
     { 
     Notificator not = new Notificator(); 
     not.ShowNotification(this); 
      base.OnDestroy(); 
     } 
+0

Это не помогло. –

+0

Вы добавили это в свою деятельность –

+0

да, но он работает так же, как и раньше ... когда я закрою приложение за 10 секунд, никаких уведомлений не будет. –

0

Вы должны сохранить свое служение живым при уничтожении своего приложения.

  1. Добавить return StartCommandResult.Sticky; в метод OnStartCommand.
  2. начало обслуживания OnTaskRemoved функция.

Создайте свою службу с помощью интерфейса Service, IntentService предназначен для длительной работы.

class NotifyEvent : Service 
    { 
     [return: GeneratedEnum] 
     public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId) 
     { 
      new Task(() => { 

       PendingIntent pIntent = PendingIntent.GetActivity(this, 0, intent, 0); 
       Notification.Builder builder = new Notification.Builder(this); 
       builder.SetContentTitle("hello"); 
       builder.SetContentText("hello"); 
       builder.SetSmallIcon(Resource.Drawable.Icon); 
       builder.SetPriority(1); 
       builder.SetDefaults(NotificationDefaults.Sound | NotificationDefaults.Vibrate); 
       builder.SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis()); 
       Notification notifikace = builder.Build(); 
       NotificationManager notificationManager = GetSystemService(Context.NotificationService) as NotificationManager; 
       const int notificationId = 0; 
       notificationManager.Notify(notificationId, notifikace); 

      }).Start(); 
      return StartCommandResult.Sticky; 
     } 

     public override IBinder OnBind(Intent intent) 
     { 
      return null; 
     } 
     public override void OnTaskRemoved(Intent rootIntent) 
     { 
      Intent restartService = new Intent(ApplicationContext, typeof(NotifyEvent)); 
      restartService.SetPackage(PackageName); 
      var pendingServiceIntent = PendingIntent.GetService(ApplicationContext, 0, restartService, PendingIntentFlags.UpdateCurrent); 
      AlarmManager alarm = (AlarmManager)ApplicationContext.GetSystemService(Context.AlarmService); 
      alarm.Set(AlarmType.ElapsedRealtime, SystemClock.ElapsedRealtime() + 1000, pendingServiceIntent); 

      System.Console.WriteLine("service OnTaskRemoved"); 
      base.OnTaskRemoved(rootIntent); 
     } 
    } 

enter image description here

+0

У меня есть телефон Huawei. Это работает, когда я не переношу приложение в защищенные приложения вручную? –

+0

@MikBig Вы можете попробовать его на телефоне Huawei, у меня нет телефона Huawei. Я думаю, это работает. –