Android: управление сервисом из виджета - PullRequest
0 голосов
/ 14 июля 2011

Я уверен, что это простой ответ, но он сводит меня с ума, и я надеюсь, что кто-то может просто избавить меня от моих страданий.

У меня есть активность Android, виджет и сервис. Служба запускает звук в фоновом режиме, либо в течение определенного времени, либо непрерывно. Поскольку я хочу, чтобы звук работал до тех пор, пока не будет достигнут стоп, у меня нет метода stopSelf () в сервисе. Все было хорошо и здорово, потому что у меня было startService при игре и stopService при остановке. Теперь я хочу бросить виджет в этом последнем обновлении. Так вот где я застрял. Поскольку это приемник вещания, я очень ограничен в том, что он может делать. Я могу вызвать context.stopService, но я хочу остановить службу только при нажатии кнопки. Я могу только найти способ установить onClickListener с pendingIntent.

В методе onStartCommand () моего сервиса я считал дополнительные "петли" из входящего намерения. Поэтому я попытался просто передать нулевое значение, но по какой-то причине он, похоже, его не читает. Я знаю, что onStartCommand () вызывается в сервисе, потому что играет музыка, но независимо от того, какие дополнительные усилия я добавляю в намерение, кажется, что он не читается, и я понятия не имею, почему. Итак, мой вопрос: какова лучшая стратегия для остановки службы с помощью кнопки виджета? Я надеюсь, что это простой ответ, в противном случае, я думаю, я мог бы создать новый приемник активности или широковещания для обработки нажатия кнопки, но это кажется таким ненужным. Любой совет будет очень признателен! Спасибо!

1 Ответ

1 голос
/ 14 июля 2011

PendingIntent, который вы передаете кнопке в виджете, должен иметь возможность отправлять дополнительные услуги в службу, как и любое другое намерение: вы должны быть в состоянии обнаружить это намерение в onStartCommand, а затем дать команду службе прекратить Звук и остановить себя. Трудно сказать, что еще вы делаете не так без кода.

...