Метод StartService выполняется, но события Service не срабатывают - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть действие, которое я запускаю службу в методе OnCreate.StartService метод выполняется без ошибок, но ни одно из событий в классе Service не сработало!Я тестирую как явный, так и неявный режимы запуска службы, как вы можете видеть в моем коде, но оба результата были одинаковыми!Мои коды:

Активность:

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    try
    {
        serviceToStart = new Intent(ApplicationContext, typeof(TrackService));
        StartService(serviceToStart);
    }
    catch(Exception e)
    {
        var ee = e;
    }
}

Отслеживание сервиса:

[Service(IsolatedProcess = true, enabled = true)]
public class TrackService : Service
{
    FusedLocationProviderClient fusedLocationProviderClient;

    public override void OnCreate()
    {
        base.OnCreate(); //Break point set here
    }

    public override StartCommandResult OnStartCommand(Android.Content.Intent
                 intent, StartCommandFlags flags, int startId)
    {
        fusedLocationProviderClient = 
            LocationServices
            .GetFusedLocationProviderClient(this); //Break point set here
        return StartCommandResult.Sticky;
    }

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

Манифест:

РЕДАКТИРОВАНИЕ : руководства по манифестуудалено удалено

Может кто-нибудь сказать мне, в чем проблема?

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

1) Разрешить ServiceAttribute (и процессу сборки) установить свойство, указав запись манифеста, и ручные изменения не требуются:

[Service(IsolatedProcess = true, enabled = true)]

Примечание. Если вы хотите / нужно изменить манифест вручнуювам нужно будет присвоить Name в атрибуте ServiceAttribute, чтобы жестко закодировать полный пакет и имя класса Java, которое вы затем сможете использовать в манифесте

2) При запуске службы создайте намерениеиспользуя контекст приложения и тип C # вашего сервиса:

var serviceIntent = new Intent(ApplicationContext, typeof(TrackService));
StartService(serviceIntent);
0 голосов
/ 12 декабря 2018

Наконец-то!Я нашел корень проблемы!Однако я не знаю, почему это происходит и как я могу решить эту проблему!

Я всегда получал эту ошибку в logcat:

Не найдено ни одной реализации для void mono.android.Runtime.register

После удаления части за частью кода я понял, что проблема вызвана атрибутом IsolatedProcess.Просто удалив его, код работает хорошо.

Примечание: Как видите, нет необходимости ставить атрибут enabled и для службы.

[Service]
public class TrackService : Service
0 голосов
/ 12 декабря 2018

Пожалуйста, укажите ваш сервис в файле манифеста.Это очень важный шаг, потому что без записи сервиса манифеста ваш класс сервиса никогда не будет инициирован.

Очень важна нижняя строка кода, это должно быть в вашем файле манифеста.

<service android:name=".TrackService" android:enabled="true"></service>

См. Ссылку ниже для получения дополнительной информации об услугах - https://developer.android.com/training/run-background-service/create-service

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...