Я не могу получить сервис startService от моего BroadcastReceiver - PullRequest
1 голос
/ 10 декабря 2011

Я пытаюсь запустить мой Сервис, когда с моего BroadcastReceiver сработала тревога. Я не получаю никакой ошибки, и код выполняется, но он не запускает мой сервис, и я не получаю никаких ошибок. Может ли это быть проблемой моего Сервиса или манифеста?

Я заметил, что у меня часто возникают проблемы, когда речь идет о намерениях и контекстах. Я попытался прочитать об этом, но я не могу найти сайт, который объясняет это хорошо, хотя. Есть предложения?

public class Alarm extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
        vibrator.vibrate(1000);

        Intent myService = new Intent(BackgroundService.class.getName());
        context.startService(myService); 
    }
}

****************** Манифест *******

<service android:name=".BackgroundService" android:process=":remote">
    <intent-filter>
    <action android:name="se.davidsebela.ShutMeUp.BackgroundService" />
    </intent-filter>
</service>

<receiver  android:process=":remote" android:name="Alarm"></receiver>
</application>

Ответы [ 2 ]

2 голосов
/ 10 декабря 2011
Intent myService = new Intent(BackgroundService.class.getName());

Это создает новое намерение всего лишь действием.Действие - это имя класса BackgroundService.Это не будет работать, когда вы используете startService().

Вместо этого вместо этого используйте конструктор намерений, который получает класс и контекст в качестве аргументов:

Intent myService = new Intent(context, BackgroundService.class);
0 голосов
/ 11 декабря 2011

Понял :-D вроде. Теперь я знаю проблему. Предлагаемый вами код работает.

Intent myService = new Intent(context, TestService.class);
context.startService(myService);

Но проблема в том, что моя служба уже запущена. Я думал, что он был убит, но остановился только таймер, а служба все еще работала. Таким образом, когда две строки выше выполнены, это в основном ничего не доза.

Теперь я должен выяснить, как на самом деле его убить:)

...