Служба, Перепвязать или не связаны вообще? - PullRequest
1 голос
/ 26 декабря 2010

Хорошо, у меня есть эта проблема.У меня есть сервис, который воспроизводит mp3-файл.Я также могу приостановить и остановить mp3 с помощью функций AIDL.Это работает отлично.Я могу нажать домашнюю кнопку и затем перезапустить действие, и у меня все еще есть контроль над службой.

Однако, если я нажимаю клавишу возврата и затем открываю занятие, я больше не могу контролировать службу.

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

Ответы [ 3 ]

4 голосов
/ 02 декабря 2012

Мне кажется, я понимаю, что вы хотите сделать. После запуска занятия и начала воспроизведения mp3 вы выходите из занятия. Затем в следующий раз, когда вы откроете его, вы захотите связать его с существующим сервисом и не запускать другой экземпляр сервиса.

Чтобы достичь этого, вы должны использовать начатое действие, а затем связываться с ним. То есть используйте startActivity (Intent) при нажатии кнопки, затем в следующей строке выполните bindService (Intent, connection, Context.FLAG_AUTO_CREATE); . Это привязывает сервис, затем вы можете отменить привязку в onDestroy (рекомендуется) или onPause. Кроме того, поскольку это запущенный сервис, он не уничтожается при отмене привязки. Вы должны явно вызвать stopService (Intent) или stopSelf () , чтобы остановить эту службу.

В onResume своей деятельности вы должны проверить, запущена ли служба, а затем снова выполнить привязку к ней, используя код: bindService (Intent, connection, 0);

Объект connection является зарегистрированным ServiceConnection, который запускается каждый раз, когда вы привязываете или отсоединяете сервис.

private ServiceConnection connection = new ServiceConnection() {

public void onServiceConnected(ComponentName className,
        IBinder service) {
}

public void onServiceDisconnected(ComponentName className) {
}
* *} Тысяча двадцать-одина; * * тысяча двадцать две

Кроме того, вы можете отправлять и получать сообщения об активности, в вашем случае во время воспроизведения песни в формате mp3, с помощью службы Messenger.

Обратитесь к этой ссылке , чтобы узнать больше об использовании Messenger.

Надеюсь, это поможет.

0 голосов
/ 13 сентября 2012

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

Это нормальный шаблон, он может работать для вашего приложения.

То, что я думаю, вы должны сделать, так как я не могу найти способ привязаться к услуге; должен проверить, запущена ли служба (что может быть легко выполнено с помощью статического логического значения в классе службы, которое изменяется на true при запуске, и возвращается на false при уничтожении), и использует это логическое значение для предотвращения повторного запуска onCreate вашего приложения новая цель обслуживания. Затем вы можете снова связать его и использовать его функции.

Кроме того, если есть возможность использовать только одну песню за раз, вы можете изменить все эти переменные на статические, чтобы любое связанное приложение могло влиять на свои переменные (объем мышления и т. Д.) И также считывать их переменные. (время игры, название и т. д.)

Надеюсь, это немного поможет!

0 голосов
/ 26 декабря 2010

Я думаю, что можно перепривязать управление при перезапуске активности.

Я искренне надеюсь, что вы не связаны со службой, поскольку вы не должны выполнять onDestroy() действия без отмены привязки.

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

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

Что я делаю не так?

Большинство музыкальных проигрывателей предназначены для воспроизведения после того, как пользователь выйдет из игры. Следовательно, музыкальные проигрыватели не должны использовать шаблон привязки, поскольку шаблон привязки не поддерживает службу, продолжающую работать после того, как пользователь завершает действие.

Вместо этого используйте шаблон команды: вызовите startService() для запуска воспроизведения музыки, возможно, с Intent дополнительными функциями для управления тем, что воспроизводится. Звоните stopService(), чтобы остановить воспроизведение музыки. Вот пример проекта , который демонстрирует это, с фактическим заглушением воспроизведения музыки (как я описал в другой книге).

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