2012-01-21 4 views
3

Пожалуйста, взгляните на мой simple three-methods Service class, который транслирует аудио и воспроизводит его напрямую.Потоковое аудио с использованием сервиса

public class StreamService extends Service { 

    private static final String TAG = "MyService"; 
    String url; 
    MediaPlayer mp; 

    @Override 
    public void onCreate() { 
     Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show(); 
     Log.d(TAG, "onCreate"); 

     mp = new MediaPlayer(); 
     mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    } 

    @Override 
    public void onDestroy() { 
     Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show(); 
     Log.d(TAG, "onDestroy"); 

     mp.stop(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startid) { 
     Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show(); 
     Log.d(TAG, "onStart"); 

     url = intent.getExtras().getString("url"); 
     try { 
      mp.setDataSource(url); 
      mp.prepare(); 
      mp.start(); 
     } catch(Exception e){}   
     return START_STICKY; 
    } 
} 

В моей деятельности, у меня есть две кнопки для воспроизведения/остановки мультимедийного файла:

  • playButton выполнить это:

    Intent i = new Intent(this, StreamService.class); 
    i.putExtra("my_mp3_url_string"); 
    startService(i); 
    
  • stopButton выполнить это:

    stopService(new Intent(this, StreamService.class)); 
    

Теперь у меня есть несколько вопросов:

  1. как я могу реализовать в pauseButton? Я хочу приостановить работу носителя в службе
  2. Выполняется ли мой способ воспроизведения/остановки медиа/службы? Есть ли лучший способ?
  3. Как я могу (периодически) обновлять пользовательский интерфейс моей деятельности с моей службы? мне нужно что-то добавить?

ответ

9

Я бы рекомендовал не использовать срок службы Сервиса в качестве способа запуска и остановки воспроизведения. Использование этого подхода будет означать, что каждый раз, когда вы хотите запустить новый поток, код будет замедляться еще больше, если вам нужно будет открыть новую службу. Вы можете сэкономить некоторое время, просто используя тот же сервис, что и все. Хотя это не значит, что он должен оставаться running all the time.

Чтобы выполнить это (и чтобы сделать паузу), вам нужно будет привязаться к Сервису после его запуска. С связанной службы, вы будете иметь возможность совершать звонки на нее - такие, как пауза, воспроизведение, остановка и т.д.

Вот некоторые ссылки, которые должны помочь вам с тем, что вы ищете:

+0

Спасибо большое. Несмотря на то, что я все еще пытаюсь обновить интерфейс Activity, я верю, что вы указали мне правильное направление. Еще раз спасибо :) – iTurki

+0

@iturki: Я работаю над подобным приложением. Можете поделиться своим опытом об управлении сервисом игрока и обновлении пользовательского интерфейса в Activity? –

+0

Я думаю, что есть несколько вариантов, которые вы могли бы внести, чтобы обновить интерфейс, основанный на изменениях в сервисе плеера. 1. Зарегистрируйте слушателя, когда вы привязываетесь к службе игрока с классом, который вы делаете с обратными вызовами, которые дают вам обновления об изменениях в службе плеера. 2. (возможно, самый простой способ). Используйте трансляции из службы проигрывателя, чтобы указать обновления и прослушивать эти трансляции в пользовательском интерфейсе. – Aldryd

Смежные вопросы