Xamarin Android Запускает приложение из уведомления на переднем плане

#c# #android #xamarin

#c# #Android #xamarin

Вопрос:

Это мое последнее время в публикации, поэтому, если я что-то пропустил, пожалуйста, дайте мне знать.

Я разрабатываю службу переднего плана, которая работает нормально. Мой вопрос в том, как запустить приложение из уведомления службы переднего плана?

Если приложение закрыто, служба переднего плана все еще работает. Есть ли способ, с помощью которого я могу позволить пользователю выдвинуть ящик, нажать на запущенную службу и запустить приложение?

Я надеюсь, что кто-нибудь сможет помочь. Это мой код для службы.

 private void startForegroundService()  {  try  {  var notifcationManager = GetSystemService(Context.NotificationService) as NotificationManager;  var intent = new Intent(this, typeof(ProteoForegroundService));  PendingIntent pendingIntent = PendingIntent.GetActivity(this, PENDING_INTENT_ID, intent, PendingIntentFlags.OneShot);   if (Build.VERSION.SdkInt gt;= BuildVersionCodes.O)  {  createNotificationChannel(notifcationManager);  }   var notification = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);  notification.SetAutoCancel(false);  notification.SetOngoing(true);  notification.SetSmallIcon(Resource.Drawable.Icon);  notification.SetContentTitle("Proteo Mobile");  notification.SetContentText("Proteo Mobile is running");  notification.SetContentIntent(pendingIntent);  StartForeground(NOTIFICATION_ID, notification.Build());  }  catch (Exception ex)  {  Crashes.TrackError(ex, new Dictionarylt;string, stringgt; { { "ProteoForegroundService.cs", "startForegroundService()" } });  }  }   private void createNotificationChannel(NotificationManager notificationMnaManager)  {  try  {  var channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, NOTIFICATION_CHANNEL_NAME,  NotificationImportance.Low);  notificationMnaManager.CreateNotificationChannel(channel);  }  catch (Exception ex)  {  Crashes.TrackError(ex, new Dictionarylt;string, stringgt; { { "ProteoForegroundService.cs", "createNotificationChannel()" } });  }   }   public override IBinder OnBind(Intent intent)  {  return null;  }   public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)  {  startForegroundService();   return StartCommandResult.NotSticky;    }  

Ответ №1:

Уведомление.Метод SetContentIntent-это конкретный способ задания действия, которое вы хотите выполнить, когда пользователь нажимает на запущенную службу и отложенный объект.Метод getActivity должен получить действие. Такие как:

 private void startForegroundService() {  try  {  var notifcationManager = GetSystemService(Context.NotificationService) as NotificationManager;  var intent = new Intent(this, typeof(MainActivity));  PendingIntent pendingIntent = PendingIntent.GetActivity(this, PENDING_INTENT_ID, intent, PendingIntentFlags.OneShot);   if (Build.VERSION.SdkInt gt;= BuildVersionCodes.O)  {  createNotificationChannel(notifcationManager);  }   var notification = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);  notification.SetAutoCancel(false);  notification.SetOngoing(true);  notification.SetSmallIcon(Resource.Drawable.Icon);  notification.SetContentTitle("Proteo Mobile");  notification.SetContentText("Proteo Mobile is running");  notification.SetContentIntent(pendingIntent);  StartForeground(NOTIFICATION_ID, notification.Build());  }  catch (Exception ex)  {  Crashes.TrackError(ex, new Dictionarylt;string, stringgt; { { "ProteoForegroundService.cs", "startForegroundService()" } });  } }  

Комментарии:

1. Когда я запускаю приложение, затем нажимаю на службу, ящик закрывается, и приложение не открывается. Есть ли конкретное место, где вызывается намерение pendinf, потому что на данный момент оно вызывается только в общедоступном переопределении StartCommandResult onStartCommand(Намерение, флаги StartCommandFlags, int startId)

2. Но я тестирую код на своем устройстве, он работает правильно. Я просто изменяю код » var намерение = новое намерение(это , тип(основная активность))». Когда я нажимаю на уведомление, сразу же отображается основная активность. @SimonProteo

3. Я был собой. Это отлично работает, спасибо !!