Atualmente, estou tentando criar um aplicativo simples que transmita uma estação de rádio da Internet. Tenho o URL da estação e estou configurando o Media Player como
MediaPlayer mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(URL);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
O programa não está travando quando emulado, mas nada está sendo reproduzido e recebo o seguinte erro:
start called in state 0
e logo abaixo está
Error (-38,0)
Alguém sabe o que isso significa?
Eu li um pouco sobre esses erros de estado, mas não consegui encontrar nada que se aplique ao meu projeto.
android
android-mediaplayer
SmashCode
fonte
fonte
Respostas:
Você precisa chamar
mediaPlayer.start()
oonPrepared
método usando um ouvinte. Você está recebendo este erro porque está ligandomediaPlayer.start()
antes de ele atingir o estado preparado.Veja como você pode fazer isso:
fonte
Parece que o Erro -38 significa uma exceção de estado (como indica a mensagem de erro). Por exemplo, se você ligar
start()
, antes de a música estar pronta ou quando ligarpause()
, mesmo que a música não esteja tocando.Para corrigir esse problema, verifique o estado do mediaPlayer antes de chamar os métodos. Por exemplo:
Além disso, o MediaPlayer está enviando mensagens de eventos. Mesmo se você não precisar do evento preparado (embora seja uma boa ideia não iniciar a reprodução antes que esse evento seja disparado), você deve definir um ouvinte de retorno de chamada. Isso também vale para o
OnErrorListener
,OnCompletionListener
,OnPreparedListener
eOnSeekCompletedListener
(se você chamar o método buscar).Os ouvintes podem ser anexados simplesmente por
fonte
Recebi este erro quando estava tentando obter a posição atual (MediaPlayer.getCurrentPosition ()) do reprodutor de mídia quando não estava no estado preparado. Eu resolvi isso mantendo o controle de seu estado e chamando o método getCurrentPosition () apenas depois que onPreparedListener for chamado.
fonte
Este é o meu código, testado e funcionando bem:
fonte
eu testei o código abaixo. trabalhando bem
fonte
SetAudioStreamType(..)
usoSetAudioAttributes(...)
Eu encontrei o mesmo problema há alguns dias. Meu MediaPlayer de áudio funciona bem em aparelhos com alto poder de processamento, mas para aparelhos lentos, o media player simplesmente não tocava há algum tempo e do LogCat tinha muitos reclamações sobre a chamada em estado errado. Então, resolvi chamando colocando a chamada para start () , pause () , ... no método onPrepared () de OnPreparedListener () como abaixo:
Tente também lançar qualquer reprodutor de mídia de que você não precise mais. Por exemplo, se você não deseja reproduzir o áudio ou vídeo em segundo plano, deve chamar mediaPlayer.release () em onPause () .
fonte
Algumas vezes, os arquivos são codificados de uma forma que o Android não consegue decodificar. Mesmo alguns arquivos mp4 não podem ser reproduzidos. Tente um formato de arquivo diferente (.3gp são reproduzidos na maioria das vezes) e veja ..
fonte
acima da imagem, você pode obter o caminho certo.
fonte
Você recebe esta mensagem nos logs, porque você faz algo que não é permitido no estado atual da sua instância do MediaPlayer.
Portanto, você deve sempre registrar um manipulador de erros para capturar essas coisas (como @tidbeck sugeriu).
A princípio, aconselho você a dar uma olhada na documentação da
MediaPlayer
classe e entender o que isso significa com estados. Consulte: http://developer.android.com/reference/android/media/MediaPlayer.html#StateDiagramSeu erro aqui pode muito bem ser um dos mais comuns, os outros escreveram aqui, mas em geral, eu daria uma olhada na documentação de quais métodos são válidos para chamar em qual estado: http://developer.android.com/ reference / android / media / MediaPlayer.html # Valid_and_Invalid_States
No meu exemplo, foi o método
mediaPlayer.CurrentPosition
que chamei enquanto o media player estava em um estado em que não era permitido chamar esta propriedade.fonte
Resolvi os erros (-19,0) e (-38,0), criando um novo objeto de MediaPlayer todas as vezes antes de jogar e liberando-o depois disso.
Antes :
}
Depois de:
}
fonte
fonte
Estava muito frustrado. Então, eu tenho uma solução que funciona para mim.
fonte
Para mim isso funcionou
fonte
Também recebi este erro que tentei com onPreparedListener, mas ainda recebi esse erro. Finalmente encontrei a solução que o erro é minha culpa porque esqueci a permissão de internet no Android Manifest xml. :)
Usei codificação de amostra para mediaplayer. Eu usei no método StreamService.java
onCreate
fonte
Eu encontrei o mesmo problema um pouco antes, o amigo do primeiro andar estava certo, você ligou para o
start()
na hora errada, você deveria definir um ouvinte para prepare () ouprepareSync()
com este métodomediaPlayer.setOnPreparedListener(this)
; antes de se preparar, nesta chamada de retornostart()
. Pode resolver seu problema. Eu já tentei.fonte
Eu sou novo na programação Android e tive o mesmo erro que este. então, simplesmente redefini o mp.createmediaPlayer = MediaPlayer.create (getApplicationContext (), Settings.System.DEFAULT_RINGTONE_URI). Pode não ser a maneira verdadeira de fazer isso, mas funcionou muito bem para mim:
fonte
fonte