Android, Может ли сервис управлять кнопками? - PullRequest
0 голосов
/ 14 октября 2011

У меня есть приложение, из которого воспроизводится радиопоток, использующий службу для медиаплеера, которое работает следующим образом: при запуске оно вызывает службу, и радио начинает воспроизводиться, на главном экране у меня есть воспроизведение икнопка остановки, поэтому, когда приложение запускается, так как радио запускается сразу же, я установил кнопку воспроизведения GONE и кнопку Stop VISIBLE.поэтому, если я нажимаю кнопку «Стоп», он останавливает службу и делает кнопку воспроизведения «ВИДИМОЙ» и кнопку «Стоп» исчезающими, и наоборот.И до сих пор, если служба обнаруживает ошибку, она отправляет Toast плюс обновление на панель уведомлений, но кнопка «Стоп» продолжает оставаться ВИДИМОЙ, а кнопка «Воспроизведение» по-прежнему УДАЛЕНА, поэтому мой вопрос заключается в том, как я могу сделать свою службу при обнаруженииошибка сделать кнопки поменять?так что я мог бы иметь кнопку Play VISIBLE и Stop GONE, чтобы повторить попытку.Вот как я кодирую кнопки в OnCreate в моей основной деятельности:

 Button playBtn = (Button) findViewById(R.id.buttonPlay);
    playBtn.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {

             View b = findViewById(R.id.buttonPlay);
                b.setVisibility(View.GONE);

                View c = findViewById(R.id.buttonStopPlay);
                c.setVisibility(View.VISIBLE);

                    TextView textRadioName = (TextView)   findViewById(R.id.textView);
                    textRadioName.setText("You are listening Radio!");
                    startService(new Intent("PLAY"));
                    start();

    }});

    Button stopBtn = (Button) findViewById(R.id.buttonStopPlay);
    stopBtn.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        View b = findViewById(R.id.buttonStopPlay);
        b.setVisibility(View.GONE);

        View c = findViewById(R.id.buttonPlay);
        c.setVisibility(View.VISIBLE);

            TextView textRadioName = (TextView) findViewById(R.id.textView);
        textRadioName.setText("Listen Radio Here");

        pause();
    }});

, и вот как я кодирую ошибку в моей службе MediaPlayer:

@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
    Toast.makeText(this, "Radio not connected!...." , Toast.LENGTH_LONG) .show();
    StreamError = true;
    updateNotification("Radio not connected!");
    return false;
}

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

1 Ответ

1 голос
/ 14 октября 2011

Вы можете привязаться к своему сервису, который вернет IBinder, который вы должны внедрить.Внутри вашего IBinder вы можете поместить такую ​​функцию:

public void setPlayer(IPlayer player);

Где ваш IPlayer будет иметь набор функций, которые вы хотите вызвать из сервиса.Здесь вы можете поместить код, чтобы скрыть кнопку остановки, показать кнопку воспроизведения или что-либо еще, что вы хотите сделать из Сервиса.

По запросу, ссылка на образец в документации: http://developer.android.com/reference/android/app/Service.html#LocalServiceSample

...