簡體   English   中英

通過單擊前台服務通知顯示當前活動

[英]Show current Activity by clicking Foreground Service Notification

如何通過單擊通知顯示前台服務活動? 當我使用我的代碼時,它會啟動新的活動,但我需要服務正在運行的活動。 這是我的代碼(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;

            }
}

我希望你能幫助解決這個問題。 非常感謝。

我寫了一個關於它的演示,這是一個 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

我不清楚您要打開什么活動

如何顯示前台服務活動

前台服務獨立於您的應用程序運行

您在這里啟動 MainActivity:

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

你能澄清一下你想在這里做什么嗎?

ps:我知道這不是答案,還不能評論

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM