Мауи: Android: служба переднего плана не работаетAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Мауи: Android: служба переднего плана не работает

Сообщение Anonymous »

Я имею интегрированную службу переднего плана, как ниже в моем приложении Maui.

Код: Выделить всё

// MyForegroundService.cs
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using AndroidX.Core.App;
using System.Threading.Tasks;
using Resource = Microsoft.Maui.Resource;

[Service(ForegroundServiceType = ForegroundService.TypeLocation)]
public class MyForegroundService : Service
{
private const int ServiceRunningNotificationId = 10000;
private bool isRunning = true;

public override void OnCreate()
{
base.OnCreate();
System.Diagnostics.Debug.WriteLine("MyForegroundService: OnCreate");
StartForeground(ServiceRunningNotificationId, BuildNotification());
}

public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
{
System.Diagnostics.Debug.WriteLine("MyForegroundService: OnStartCommand");
Task.Run(async () =>
{
try
{
while (isRunning)
{
System.Diagnostics.Debug.WriteLine("MyForegroundService: Timer Tick");
await Task.Delay(10000);
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("MyForegroundService crashed: " + ex.Message);
}
});
return StartCommandResult.Sticky;
}

public override IBinder OnBind(Intent intent) => null;

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

Notification BuildNotification()
{
var channelId = "foreground_service_channel";
var channelName = "Background Timer";
var manager = (NotificationManager)GetSystemService(NotificationService);

if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
{
var channel = new NotificationChannel(channelId, channelName, NotificationImportance.Default);
manager.CreateNotificationChannel(channel);
}

var notification = new NotificationCompat.Builder(this, channelId)
.SetContentTitle("Background Task Running")
.SetContentText("Your timer is active every 10 seconds.")
.SetSmallIcon(Resource.Drawable.ic_notification) // Replace with your icon
.SetOngoing(true)
.Build();

return notification;
}
}
backgroundservice.cs под платформами.

Код: Выделить всё

using AlertBuddies.Service;
using Android.Content;
using Android.OS;
using Microsoft.Maui.Controls;
using Android.App;
using Application = Android.App.Application;
using Android.Content.PM;

[assembly: Dependency(typeof(AlertBuddies.Platforms.Android.BackgroundService))]
namespace AlertBuddies.Platforms.Android
{
public class BackgroundService : IBackgroundService
{
public void Start()
{
System.Diagnostics.Debug.WriteLine("BackgroundService.Start() called");

var context = Application.Context;

var intent = new Intent(context, Java.Lang.Class.FromType(typeof(MyForegroundService)));

if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
context.StartForegroundService(intent);
else
context.StartService(intent);
}

public void Stop()
{
var context = Application.Context;
var intent = new Intent(context, Java.Lang.Class.FromType(typeof(MyForegroundService)));
context.StopService(intent);
}
}
}
создал интерфейс ibackgroundservice в отдельном решении: [/b]

Код: Выделить всё

public interface IBackgroundService
{
void Start();
void Stop();
}
добавлено разрешение в AndroidManifest.xml

Код: Выделить всё


//added under application tag

< /code>
Наконец -то я запустил службу из основного проекта, как ниже: < /p>
DependencyService.Get()?.Start();
< /code>
После запуска проекта ничего не происходит. Я добавил отладчик в фоновом сервисе, и это также не отображается в выходе. < /P>
System.Diagnostics.Debug.WriteLine("BackgroundService.Start() called");
Что мне здесь не хватает? Но когда приложение находится на фоне, таймер останавливается. Я хочу запустить таймер и отправить детали местоположения, когда приложение находится на переднем плане, фоне и даже если устройство заблокировано (приложение находится на переднем плане или на фоне). Для его реализации я пытаюсь использовать службы переднего плана в Android.

Подробнее здесь: https://stackoverflow.com/questions/796 ... ot-running
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»