#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. Я был собой. Это отлично работает, спасибо !!