2012-08-09 8 views
12

Mam problemy z MediaPlayerem Androida. Wygląda na to, że brakuje jej ważnej funkcjonalności, głównie sposobu na uzyskanie aktualnego statusu MediaPlayer lub sprawdzenie, czy jest on przygotowany. Wiem, że jest na przygotowanym słuchaczu, ale MediaPlayer działa dłużej niż Aktywność, więc kiedy Aktywność Odtwarzania zostanie wznowiona, byłoby miło uzyskać aktualny stan odtwarzacza, niezależnie od tego, czy próbuje załadować nośnik, czy załadowano nośnik itp. Czy brakuje mi czegoś, czy też muszę sam monitorować państwa graczy?Android mediaPlayer - czy istnieje metoda "isPrepared()" lub "getStatus()"?

Inną funkcjonalnością, która byłaby miła byłaby naPlayStateChanged() - Obecnie muszę ręcznie śledzić stan odtwarzania ścieżki. Czy robię to źle?

Odpowiedz

11

Mam nadzieję, że odpowiedź nie będzie za późna. Klasa MediaPlayer nie ma czegoś takiego jak metoda isPrepared() lub getStatus(), a sam musisz śledzić jej stan. Jednak nie jest to takie trudne.

Klasa MediaPlayer ma dobry diagram stanu, który naprawdę pomaga. Powinieneś wdrożyć swoją usługę w oparciu o ten schemat. Ponadto, jeśli zawsze kontrolujesz obiekt MediaPlayer z tego samego wątku, łatwo jest śledzić jego stan, dlatego polecam ci to zrobić. Metoda prepareAsync() jest jedyną asynchroniczną metodą, którą musisz się zająć, ale możesz zachować wartość logiczną, która wskazuje, że gracz jest przygotowywany, co byłoby "prawdziwe" z wywołania prepareAsync(), dopóki onPrepared() nie będzie nazywa. W każdym razie zawsze można wdrożyć onError i wychwycić wyjątek IllegalStateException, aby uniknąć awarii, jeśli przypadkowo wywołasz dowolną metodę z nielegalnego stanu.

Mimo to, media playback guide bardzo mi pomogło.

+8

Oznakowanie to jako Zaakceptowanych odpowiedź. Smutną rzeczywistością jest to, że brakuje Androida do odtwarzania/konsumpcji multimediów i brakuje nawet podstawowych funkcji, takich jak pobieranie stanu. Najlepszym sposobem na to jest napisanie wrapperu wokół obiektu MediaPlayer i samodzielne zapisanie stanu. – StackOverflowed

+5

Sam wpadłem na ten problem. Taki absurdalny nadzór, biorąc pod uwagę, jak czułe są jego metody dla obecnego stanu. –

7

Musiałem sprawdzić status podczas debugowania, aby rozwiązać problem, więc po prostu umieścić ten kod gdzieś po Wiedziałem MediaPlayer zostały przygotowane:

try { 
    this.audioPlayer.prepare(); 
} catch (Exception e) { 
} 

która drukuje błąd na konsoli jak „E/MediaPlayer: prepareAsync wywołuje stan 32. "

Teraz, jeśli mogę tylko znaleźć miejsce, w którym wymienione są wszystkie kody stanu ...

+0

Zastanawiam się, czy znasz listę kodów statusu. :) – Talha

Powiązane problemy