[Resolvido]O que acontece quando aperto voltar? E home?

20 respostas
Heartbreaker

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?

20 Respostas

Marky.Vasconcelos

Voltar dispara onBackPressed na Activiy atual.

Heartbreaker

É 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.

V

Eu faço isso, post a classe da activity.

Marky.Vasconcelos

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.

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?

Artur_Bernardo

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…

V

Tente isso e veja o que mostra.

@Override  
public void onBackPressed() {  
    if(!isPlaying){  
        Log.i("", "tocando");
    } else {  
        Log.i("", "não está tocando");
    }
Marky.Vasconcelos

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?

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.

Heartbreaker

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?

Heartbreaker

Um BroadcastReceiver? Como eu implementaria pra parar a reprodução ao efetuar e receber chamadas?

Artur_Bernardo

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

Heartbreaker

KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK.
God help us.

Artur_Bernardo

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!

V

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 :]

Artur_Bernardo

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.

Heartbreaker

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.

Artur_Bernardo

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.

Heartbreaker

Resolvido com isto.

Artur_Bernardo

Coloca [RESOLVIDO] no título então. :slight_smile:

Heartbreaker

Obrigado a todos.

Criado 2 de agosto de 2013
Ultima resposta 6 de ago. de 2013
Respostas 20
Participantes 4