2013-01-04 12 views
11

Jestem nowy na Androida. Tworzę usługę Media Player, aby móc kontynuować odtwarzanie piosenki nawet po zamknięciu aplikacji. Stworzyłem działanie dla Media Playera i ma on wszystkie funkcje, takie jak odtwarzanie, pauza, następny, poprzedni, seekbar, a także zawiera oncompletionlistener. Wszystko działa doskonale. Ale teraz chcę, żeby wszystko było zarządzane przez serwis.Usługa MediaPlayer Android

Stworzyłem MyService Klasa:

public class MyService extends Service { 

    public static MediaPlayer mp; 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     mp = new MediaPlayer();  
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     return START_STICKY; 
    } 

Ale w mojej aktywności gracza Stworzyłem ArrayList dla songList z którego biorę currentsongIndex i przez to jestem utrzymując wszystkie funkcje jak następny, poprzedni i wszystko. Teraz w serwisie, w jaki sposób mogę uzyskać listę utworów, która jest również wymagana w mojej działalności? Gdzie powinienem utworzyć średnią obiektu MediaPlayer w usłudze lub działalności?

dla MediaPlayer Mam adres http://www.androidhive.info/2012/03/android-building-audio-player-tutorial/. Dla mojego kodu odtwarzacza mediów możesz polecić tę stronę. Dzięki. Zapamiętaj moje wątpliwości. Jestem taki skołowany. Odpowiedz mi wkrótce ..

+0

Utwórz go w serwisie. To jest klasa, która potrzebuje listy utworów. –

+0

Oznacza, że ​​muszę utworzyć listę utworów w serwisie. Ale kiedy klikam następny przycisk w działaniu, w jaki sposób moja usługa będzie obsługiwać? – zanky

+0

Czy możesz też opublikować kod aktywności? Ponadto, nie jestem pewien, czy otrzymuję odpowiednie wymagania. Możesz także utworzyć oddzielną klasę dla piosenek, a następnie po prostu wywołać ją za pomocą obiektu, gdziekolwiek jest to wymagane. –

Odpowiedz

7

Jesteś na dobrej drodze. Zaadaptowałem z próbek SDK; tak to robię i działa świetnie. ze swojego ArrayList (w NOT swojej działalności z Serwisu) nazywamy

onListItemClick 

i uruchomić intencji że uruchamia usługę muzyczną:

startService(new Intent(MusicService.ACTION_PLAY)); 

w twojej manifest trzeba dodać:

<intent-filter> 
      <action android:name="com.blah.blah.action.PLAY" /> 
      <xxx xxx> 
</intent-filter> 

Oczywiście w swojej usłudze muzycznej musisz otrzymać intencję:

public int onStartCommand(Intent intent, int flags, int startId) { 
    String action = intent.getAction(); 
    if (action.equals(ACTION_PLAY)) 
     processPlayRequest(); 
    } 

Pamiętaj, aby dodać Intencje do pomijania, przewijania do tyłu, zatrzymywania itp. Daj mi znać, jeśli to pomoże.

+0

tak .. chcę tego tylko. ale hw mogę uzyskać dostęp do przycisku aktywności z mojej usługi, ponieważ chcę zmienić obraz przycisku źródła podczas grania i kiedy zatrzymuję się na tym samym przycisku. ne pomysł? – zanky

+0

To powinno być prawdopodobnie obsługiwane z poziomu Twojej aktywności, ale możesz także zainicjować przycisk jak "public static Button myButton;" możesz zmienić obraz z dowolnego miejsca, ale nie polecałbym tego w ten sposób ... raczej z w ramach zdarzenia 'onClick' i pozwól, aby serwis muzyczny obsługiwał odtwarzanie muzyki. Jeśli jesteś zadowolony z mojej odpowiedzi powyżej, zaznacz jako zaakceptowany. –

1

Aby aplikacja działała w tle, powinna być obsługiwana przez samą usługę.
Spróbuj tego przykładu. http://www.vogella.com/articles/AndroidServices/article.html
Usługa przeznaczona jest do pracy w tle.

+0

ohk thanx za spędzanie czasu na mój problem .. – zanky

+1

pewny. Staraj się nie trzymać jednego kawałka kodu nawet podczas samouczków konsultacyjnych. Wszystko, co musisz zrobić, to stworzyć podstawowy układ w działaniu (przyciski i niektóre funkcje itp.). Możesz uruchomić usługę w "onclick" jakiegoś przycisku i pozwolić, aby usługa działała w tle. mediaplayer/songs idą w klasie serwisowej. –

0

Przeszedłem dokładnie to samo! To długa droga do opracowania nawet naprawdę świetnej aplikacji odtwarzacza mp3. Odpowiedź jest długa.

Oto kilka zasobów, które naprawdę mi pomogły. Android ma artykuł o tej samej rzeczy w ich docs autorów:

http://developer.android.com/guide/components/services.html

zwrócić uwagę na to, co mówi się w dolnej części tego długiego artykułu na temat usług związanych z systemem i na pierwszym planie.

Dodatkowo, zarządzanie stanem gracza spowodowało najwięcej bólu głowy.

Będziesz także chciał rzucić okiem na wątki, ponieważ utworzenie nowej usługi nadal będzie działało w Main wątku interfejsu użytkownika, brzmi to szalenie, ale prawda. Spójrz na ExecutorService, aby zarządzać pulami wątków. Chciałbym ci powiedzieć, że było łatwiej.

Niestety większość mojego formalnego wykształcenia z całej sieci, ale z usług android pochodzi z płatnego serwisu:

http://www.pluralsight.com/training/Courses/TableOfContents/android-services

Jest dobrym źródłem informacji dla wszystkich programistów myślę, ale ma wielkie sekcje o wiele aspekty programowania Android, które są krótko omówione tylko w innych tutorialach.

Zasoby w firmie Vogella są również dobre, o czym wspomniano powyżej.