Antecedentes: Eu tenho um fone de ouvido Bluetooth A2DP / AVRCP ( Nokia BH-505 ) que uso ativamente para ouvir podcasts e música. Claro, eu os ouço com aplicativos diferentes. O fone de ouvido bluetooth possui alguns botões de "comando" (AVRCP), relevantes para o áudio específico: "próxima faixa", "faixa anterior" e "reproduzir / pausar"
Atualmente, sempre que pressiono um dos comandos, um dos tocadores de música que eu instalei ( Meridian ) sempre recebe o comando - mesmo quando não está ativo. Portanto, quando clico em "reproduzir / pausar" com a intenção de pausar um podcast ( DoggCatcher ), o Meridian é ativado e começa a tocar música junto com o podcast.
Ambos os jogadores estão configurados para usar o fone de ouvido: DoggCatcher tem "Bind to headset" ativado e Meridian tem "Headset Buttons" ativado. Atualmente, estou usando o estoque não raiz Android 2.2.1 no GT-S5570, mas pode estar fazendo root e atualizando para o 2.3 CyanogenMod (ou algo semelhante) no futuro.
Ignorando os detalhes, minha pergunta sobre isso é mais geral:
- Como o Android determina qual aplicativo reage a esses comandos? Estou interessado mesmo em uma resposta muito técnica.
No lado prático, estou interessado em:
- Preciso mexer nas configurações de cada aplicativo para determinar qual aplicativo aceita os comandos ou existe alguma maneira geral de determinar isso?
- Existe uma maneira de configurar isso para que o aplicativo realmente ativo receba automaticamente sempre a prioridade? (como foi solicitado parcialmente em outra pergunta )
Como esta pergunta difere de perguntas semelhantes:
"Como definir o comportamento do botão 'Play' no Bluetooth Remote" - apenas foco prático e diferente, até o momento não tem respostas, e também estou interessado em respostas que exigiriam root ou firmware personalizado (especialmente o CyanogenMod).
Alterar o aplicativo padrão para lidar com os controles do fone de ouvido - um problema exato que foi corrigido, mas não de uma maneira que respondesse às minhas perguntas, embora dê algumas dicas sobre como as coisas funcionam.
Como faço para que o botão dos meus fones de ouvido controle algo diferente do player de música stock?- pergunta parcialmente semelhante no lado prático, mas não se concentra em explicar como ele realmente funciona, e a única resposta é focada na parte sobre a qual não estou perguntando (fazer apenas um aplicativo receber os comandos).
por que todos os aplicativos de som recebem eventos de botão bluetooth, todos de uma vez - muito semelhantes, mas perguntando sobre um problema específico (todos os players de mídia que recebem o comando AVRCP)
fonte
Respostas:
O roteador de botão de mídia , já mencionado em uma das perguntas vinculadas, tenta descobrir qual aplicativo está tocando música e despachar os eventos do AVRCP para ele. Além disso, lista todos os aplicativos instalados, que declaram ouvir os eventos do AVRCP.
O que torna o AVRCP complicado: alguns aplicativos, como o Music Unlimited da Sony , parecem não declarar
android.intent.action.MEDIA_BUTTON
em seu manifesto. Por esse (ou talvez outro) motivo, eles não podem ser controlados pelo roteador de botão de mídia. Eu sei que, por exemplo, o Music Unlimited pode ser controlado via AVRCP desde que eu o li em um comentário do usuário e também consegui executá-lo uma vez, mas infelizmente não é reproduzível. Portanto, nesses casos, parece que precisamos aguardar a atualização de um aplicativo com uma implementação limpa do tratamento de eventos do AVRCP.De acordo com o wiki do roteador do botão de mídia, "O manuseio da intenção do botão de mídia é feito por meio de transmissões ordenadas, e cada aplicativo define sua própria prioridade para receber". Portanto, talvez seja possível escrever um aplicativo que exiba essas prioridades e, com efeito, permitir que você determine qual aplicativo será iniciado. No entanto, não conheço esse aplicativo.
fonte
Eles finalmente adicionaram uma seção para responder a essa pergunta exata: https://developer.android.com/guide/topics/media-apps/mediabuttons.html
fonte
Talvez isso ajude um pouco:
Samsung S5 -> receptor Bluetooth + conectores para fone de ouvido
Estou usando o Samsung S5, primeiro com o aplicativo 7digital para baixar e tocar música. Então mudei e usei o Cloudplayer. Mas sempre que o Clouplayer está sendo reproduzido e eu pressiono o botão de pausa / reprodução no meu receptor Bluetooth, meu aplicativo 7digital começa a tocar música. Não foi possível alterar nenhuma configuração para alterar a reprodução / pausa do bluetooth no Cloudplayer. Excluí todas as minhas músicas baixadas pelo 7digital e tentei novamente. Problema resolvido! A reprodução / pausa está de alguma forma vinculada ao Cloudplayer agora.
fonte
Não é um problema com o seu dispositivo BT. Quando emparelhado com o seu telefone, o Bluetooth Headset reproduz um fluxo A2DP ativo iniciado no Celular. Se for um reprodutor de mídia padrão no seu telefone, ele pode reagir a todos os comandos de controle do AVRCP, como reproduzir pausa, pular, fw etc. Agora, quando você reproduz algo na web ou algum outro reprodutor que não implementa todos esses controles sobre o AVRCP, por BT Headset ainda é um fluxo A2DP ativo chegando. Ele enviará as mensagens do Controle AVRCP para o seu telefone. Agora, é o seu telefone que deve rotear esses comandos para o respectivo aplicativo na maioria dos casos, para a fonte de transmissão A2DP ativa ou, no seu caso, seu telefone ainda está encaminhando comandos AVRCP para o music player padrão.
Sua melhor aposta seria tentar configurar seu celular, desde que a fonte que você está reproduzindo suporte ao controle AVRCP. Se não, então você não pode fazer nada. Nesse caso, definitivamente o Mobile deve permitir que esses comandos AVRCP sejam manipulados pela sua fonte de streaming A2DP ativa.
fonte
Este aplicativo seria "Media Button Router" https://play.google.com/store/apps/details?id=com.harleensahni.android.mbr
fonte