通过单击前台服务通知显示当前 Activity

Show current Activity by clicking Foreground Service Notification

如何通过点击通知显示前台服务activity?当我使用我的代码时,它会启动新的 activity,但我需要服务正常运行的 activity。这是我的代码 (Android Oreo):

 public class APSService : Service
    {
        public static bool isRunning = false;

        public override void OnCreate()
        {
            base.OnCreate();
        }

        public override void OnDestroy()
        {
            isRunning = false;
            base.OnDestroy();
        }



        [return: GeneratedEnum]
        public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId)
        {
            isRunning = true;
            byte[] input = intent.GetByteArrayExtra("inputExtra");

            Intent notificationIntent = new Intent(this, Java.Lang.Class.FromType((typeof(MainActivity))));

            PendingIntent pendingIntent = PendingIntent.GetActivity(this,
                0, notificationIntent, 0);

            var builder = new NotificationCompat.Builder(this, MainActivity.CHANNEL_ID)
                .SetContentTitle("APS Service")
                .SetSmallIcon(Resource.Drawable.notifypump)
                .SetContentText("Start program...")
                .SetContentIntent(pendingIntent);

            Notification notification = builder.Build();

            StartForeground(1, notification);

            //do heavy work on background thread

            return StartCommandResult.NotSticky;
        }


        public override IBinder OnBind(Intent intent)
        {
            return null;
        }
    }

并且在 OnCreate 的 MainActivity 中:

 protected override void OnCreate(Bundle savedInstanceState)
        {
            if (!APSService.isRunning)
            {
                createNotificationChannel();
                startService();
            }
            else
            {
                NotificationChannel serviceChannel = new NotificationChannel
                       (
                           CHANNEL_ID,
                           "APS service Channel",
                           NotificationImportance.Default
                       );
                notificationManager = (NotificationManager)GetSystemService(Java.Lang.Class.FromType((typeof(NotificationManager))));
                notificationManager.CreateNotificationChannel(serviceChannel);
                UpdateNotification("Loading...");
                APSService.isRunning = true;

            }
}

希望您能帮助解决这个问题。非常感谢。

我不清楚Activity你想打开什么

How to show Foreground Service activity

前台服务独立于您的应用运行

您正在此处启动 MainActivity:

Intent notificationIntent = new Intent(this,Java.Lang.Class.FromType((typeof(MainActivity))));

你能说明一下你想在这里做什么吗?

ps: 我知道这不是答案,还不能评论

我写了一个关于它的演示,这里是一个GIF。

您可以通过如下代码实现功能。

 [Service]
class MyForegroundService : Service
{
    public const int SERVICE_RUNNING_NOTIFICATION_ID = 10000;

    [return: GeneratedEnum]
    public override StartCommandResult OnStartCommand(Intent intent, [GeneratedEnum] StartCommandFlags flags, int startId)
    {
        CreateNotificationChannel();
        string messageBody = "service starting";
       // / Create an Intent for the activity you want to start
       Intent resultIntent = new Intent(this,typeof(Activity1));
       // Create the TaskStackBuilder and add the intent, which inflates the back stack
       TaskStackBuilder stackBuilder = TaskStackBuilder.Create(this);
       stackBuilder.AddNextIntentWithParentStack(resultIntent);
       // Get the PendingIntent containing the entire back stack
       PendingIntent resultPendingIntent = stackBuilder.GetPendingIntent(0, PendingIntentFlags.UpdateCurrent);
       var notification = new Notification.Builder(this, "10111")
        .SetContentIntent(resultPendingIntent)
        .SetContentTitle("Foreground")
        .SetContentText(messageBody)
        .SetSmallIcon(Resource.Drawable.main)
        .SetOngoing(true)
        .Build();
        StartForeground(SERVICE_RUNNING_NOTIFICATION_ID, notification);
         //do you work
        return StartCommandResult.Sticky;


    }
    public override IBinder OnBind(Intent intent)
    {
        return null;
    }

    void CreateNotificationChannel()
    {
        if (Build.VERSION.SdkInt < BuildVersionCodes.O)
        {
            // Notification channels are new in API 26 (and not a part of the
            // support library). There is no need to create a notification
            // channel on older versions of Android.
            return;
        }

        var channelName = Resources.GetString(Resource.String.channel_name);
        var channelDescription = GetString(Resource.String.channel_description);
        var channel = new NotificationChannel("10111", channelName, NotificationImportance.Default)
        {
            Description = channelDescription
        };

        var notificationManager = (NotificationManager)GetSystemService(NotificationService);
        notificationManager.CreateNotificationChannel(channel);
    }

}

这是我的演示。 https://github.com/851265601/ForegroundServiceDemo