Estou com um problema e precisava saber quais metodos são disparados quando apertamos esse botões. Estou desenvolvendo um player e quero que ele continue tocando em segundo plano mesmo se eu apertar voltar. Sobrescrevi o onPause e ele realmente nao para, mas inicia uma nova activity ao inves de a mesma. Percebi um pouco depois que a tecla home faz exatamente o que eu quero, colocando a activity em segundo plano e resgatando ela ao inves de criar uma nova. Então o que eu quero é fazer com que o botão voltar tenha a mesma funcionalidade da tecla home na minha activity enquanto estiver reproduzindo.
Ajuda?
Voltar dispara onBackPressed na Activiy atual.
É sábio eu sobrescrever esse metodo pra alcançar o desejado ou há algo mais elegante?
…
Eu sobrescrevi mandando dar onPause e onStop caso o player estivesse tocando, mas parece não acontecer nada quando eu pressiono voltar.
Eu faço isso, post a classe da activity.
Em alguns casos é passivel sobreescrever o onBack, por exemplo se você quiser mudar para um Fragmento que estava sendo exibido anteriormente (como numa stack gerenciada) e deixar super.onBackPressed() depois de lidar com todos casos que o usuario fosse “voltar” para dentro do proprio app.
@Override
public void onBackPressed() {
if(!isPlaying){
super.onBackPressed();
} else {
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME);
homeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(homeIntent);
}
To fazendo assim e ta bacana… Alguma sugestão?
Se este player vai rodar em celulares, seria legal ele pausar também quando o telefone toca.
Não sei como o próprio Android já administra isso…
Tente isso e veja o que mostra.
@Override
public void onBackPressed() {
if(!isPlaying){
Log.i("", "tocando");
} else {
Log.i("", "não está tocando");
}
[quote=Heartbreaker] @Override
public void onBackPressed() {
if(!isPlaying){
super.onBackPressed();
} else {
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME);
homeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(homeIntent);
}
To fazendo assim e ta bacana… Alguma sugestão?[/quote]
Se a intenção for continuar na mesma tela, simplesmente omita a chamada para super.onBackPressed e o usuario vai estar na mesma tela.
public void onBackPressed() {
if(!isPlaying)
super.onBackPressed();
}
Mas pelo o que parece, você está enviando o evento HOME nesse caso (nunca testei) então acredito que esteja certo.
Então marky, eu nao quero impedir o usuario de sair da tela, mas possibilitar ele sair sem parar a reprodução. Por enquanto me parece que esta dando certo, o que me pegou agora foi o alerta do Artur sobre a ligação. Qual o meio mais adequado de parar a reprodução em caso de ligação, já que acabei de testar e o player continua tocando mesmo se receber uma chamada?
Um BroadcastReceiver? Como eu implementaria pra parar a reprodução ao efetuar e receber chamadas?
Como eu estou desenvolvendo só para Tablets, não passei por isso.
não… para… acabei de lembrar que o software aqui vai rodar em celular… fora que tem tablet que recebe ligação.
é… acho que vou ter de conversar com o chefe e solicitar uns testes e quem sabe umas mudanças, hehehehe
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK.
God help us.
No meu caso, SE tiver problemas, terá sido erro da análise.
Vou pedir para testarem essa situação, e depois recebo os retornos.
Já falei com o pessoal dos testes, e eles não ficaram muito felizes.
Já vou colocar uma mensagem, quando voltar da ligação, algo como “seu processo foi interrompido por uma ligação, verifique se todos os dados estão corretos”.
Só tenho de descobrir como fazer, hehehehe
Mas certamente é fácil!
Rapaz sobre a ligação você tem que ver que metodo ele chama, onPause, OnStop ? Não me recordo qual seria, mas vocês pesquisam e sobrescrevam :]
hehehe
Sim sim… eu também estou trabalhando nisso agora, e nesse momento estou exatamente com o onStop e o onPause aqui, abertos.
Só que também quero capturar a “volta” da ligação, no fim, no onResume!
Mas é tudo tranquilo de implementar.
O foda eh que o meu onStop ja esta preparado pra continuar tocando em segundo plano e enviar a notificação avisando isso. Detectar uma ligação via broadcastreceiver é bem mais dificil do que eu pensei. To realmente empatado nisso.
Qual a dificuldade com o BroadcastReceiver???
Eu copiei daqui, e os Toast estão funcionando como eu quero. Claro que no meu caso, é mais simples que o teu.
Por enquanto eu criei apenas um sistema simples, que mostra na tela um Toast depois da ligação encerrada.
Agora vou ver como, em uma tela específica, bloquear o recebimento de ligações.
Coloca [RESOLVIDO] no título então.