Estou usando uma biblioteca que reproduz streaming de audio da internet e as vezes com a velocidade ruim (dados moveis) ele entra num estado indefinido, como se ficasse enchendo o buffer infinitamente.
Isso trava o meu app pois esta projetado para primeiro receber o feedback da tentativa de conexão para depois tomar alguma outra ação. O proprio botao de play fica disabled enquanto o buffer ainda nao encheu.
Eu gostaria de saber como implementar adequadamente um tempo limite.
Eu tentei de um jeito aqui mas não deu muito certo, talvez a propria biblioteca nao aceite interromper a conexão ou sei la o que, de qualquer forma vou postar para tirar duvidas.
@Override
public void playRadio() {
if (aacPlayer == null) {
aacPlayer = new MultiPlayer(radioCallback,
MultiPlayer.DEFAULT_AUDIO_BUFFER_CAPACITY_MS,
MultiPlayer.DEFAULT_DECODE_BUFFER_CAPACITY_MS);
}
MyService.estadoRadio = Estado.CONECTANDO;
radioConnectLimit(5000);
aacPlayer.playAsync(url);
}
@Override
public void stopRadio() {
if (aacPlayer != null) {
aacPlayer.stop();
}
}
private void radioConnectLimit(int tempo) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (estadoRadio == Estado.CONECTANDO) {
// Se depois de todo esse tempo ainda estiver conectando,
// vamos lançar uma exceção
stopRadio();
Intent it = new Intent(MyService.ACTION_PLAYERCALLBACK)
.addCategory(MyService.CATEGORY_EXCEPTION);
LocalBroadcastManager.getInstance(MyService.this)
.sendBroadcast(it);
}
}
}, tempo);
Eu acho esse jeito não muito adequado porque, pra começar,
antes do fim do tempo chegar, o radio pode ja ter conectado, parado, e ter acabado de tentar uma nova conexão denovo.
Eu desconfio que vai ser necessario um esquema melhor trabalhado com thread, mas como eu nao so mto bom em multithreading e isso provavelmente deve ser um caso comum, decidi perguntar aqui. O que aconselham?
Desde ja, muito obrigado.