Det är vad jag använder på jobbet, hemma, i sängen, i duschen och överallt däremellan för att hålla mig frisk och glad. Musik gör mig bättre, och eftersom musik är en så stor del av min Android-upplevelse har det varit en långsam nedgång som jag har varit smärtsam medveten om under de senaste åren, och särskilt de senaste månaderna.
Ibland slår jag på mina Bluetooth-hörlurar, slår på spel och ingenting händer. Och ingenting händer mycket mer än förr.
Under mina tidiga Android-dagar, med Soarin i fickan (ja, jag kallade min Samsung Captivate Glide) och mina första par av Kinivo Bluetooth-hörlurar runt halsen, jag behövde inte ha Google Play Music öppet, jag behövde bara slå spela på mina hörlurar. Faktiskt tog jag en Samsung Galaxy SII ur en låda, startade upp den för första gången på månader, parade Bluetooth-hörlurar med den och slog på play-knappen. Och musiken spelade.
Inte så mycket på de nuvarande enheterna i min stall.
HTC 10 vill bara inte följa Bluetooth-kontroller ibland, ihållande meddelande för musikappen eller inte. Det skulle snarare träffa play på min Moto 360, eller på själva telefonen. HTC A9 är lika fin. Nexus 5X startar ibland inte musik med säkerhetskopiering med ihållande meddelande utan kommer ibland att göra det utan en. Samsung S6-kanten kommer att spela, men ibland istället för att spela musikappen senast aktiv, går den tillbaka till den förinstallerade Music-appen.
Det finns ett ord som fortsätter att upprepa här: ibland. Det beror på att det här är ett problem som har många variabler: vilken Android-enhet du använder, vilken Bluetooth-enhet du använder, vilken version av Android och Bluetooth dina enheter har, vilken musikapp du försöker spela igenom, vilken miljö du är i osv. Det är många saker att bidra till ett till synes enkelt problem med knappar som inte fungerar varje gång du trycker på dem.
Så vad händer egentligen här? Tja, svaret blir lite - ok, mycket - tekniskt.
När du trycker på knappen tolkas den av Android och sänds över systemet via KeyEvents. Nästa knapp på headsetet tolkas och levereras som KEYCODE_MEDIA_NEXT genom ett KeyEvent. Det finns ett stort antal värden som kan dras upp för olika knappar, eller till och med för samma knapp. Uppspelningsknappen på de flesta headset är också pausknappen, så nyckeln kan returnera KEYCODE_MEDIA_PAUSE, KEYCODE_MEDIA_PLAY eller mycket mer troligt KEYCODE_MEDIA_PLAY_PAUSE beroende på enheten och dess nuvarande tillstånd. Förresten, om du någonsin har träffat paus och musik började någon annanstans medan det du tittade på / lyssnade pausade är detta KeyEvent att skylla på, eftersom det mottogs och agerades av två appar.
När KeyEvents har tolkats måste de fortfarande höras av en musikapp som lyssnar på medieknappar genom en BroadcastReceiver-avsikt. När allt kommer omkring kan en app inte agera på KeyEvent om den inte kan se den. Om något hindrar mottagaren i en app från att ta emot knapptryckningar, kan det röra upp uppspelningskontrollerna på flera sätt, inklusive det intermittenta problemet som jag beskrev ovan. Om en app avregistrerar sin BroadcastReceiver för snabbt när den tappar ljudfokus (metoden genom vilken Android bestämmer vilka appar som kan spela ljud vid en viss tidpunkt), så när den pausar din musik kan den förlora slutet att lyssna och inte höra knappen trycka berätta för att börja spela igen. Det är därför det är viktigt för mediaappar att hantera både Audio Focus och deras BroadcastReceiver på rätt sätt så att även om en enhet har tappat den förra, förlorar den inte den senare.
Mycket av detta beror på hur väl din musikapp är programmerad och vilka medieknappar som sänds av din enhet när du trycker på en knapp på headsetet. Detta innebär också att även om uppspelningskontrollerna är konsekventa när du köper en enhet, kan de brytas av appuppdateringar eller systemuppdateringar som ändrar hur snabbt det slutar lyssna.
När det gäller appar som Google Play Musik verkar uppdateringar som bryter saker bli allt vanligare. Medan de flesta pauser fixas snabbt, kan andra ta månader att fixa. Intermittenta problem, till exempel att din musik inte startar ordentligt på Bluetooth, kan vara svår att logga in och identifiera på rätt sätt, vilket ytterligare bromsar en möjlig fix.
Om musikappar inte har ljudfokus och inte körs som förgrundstjänster (om det ihållande meddelandet för mediaspelaren inte finns) finns det en chans att Android-systemet (mer specifikt Doze) eller den så kallade "resursen" -sparande appar kan döda appen för att frigöra minne för andra aktiviteter. När det händer kan det hända att det inte går att slå på spel eftersom det inte finns några mottagare som är öppna och lyssnar efter kommandon.
Nu, precis som det finns flera saker som kan bryta dina uppspelningskontroller, finns det också alternativ för att försöka fixa det.
Den första lösningen är lite extrem, men en av de få som användare kan implementera på sina nuvarande telefoner idag utan några rotändringar i programvaran. Med hjälp av appar som Tasker och AutoInput kan vi upptäcka knapptryckning, undertrycka den ursprungliga KeyEvent-åtgärden och sedan utföra ett mer specialiserat (och mer konsekvent) kommando riktat direkt mot en app. Till exempel, istället för att play-knappen är ett generiskt play media-kommando som kan plockas upp eller ignoreras av dussintals mediatjänster, kan vi ombilda det som ett play / pause-kommando specifikt för Google Play Music så att andra appar inte starta i stället.
Detta kan vara tråkigt att programmera, och genom att undertrycka den ursprungliga åtgärden och ersätta den, bryter vi den ursprungliga pausknappen som vi kanske vill använda i andra appar som YouTube eller Netflix. Kort sagt, det är inte mycket av en lösning för icke-tekniska användare eller användare som använder en mängd olika mediaappar.
Många telefoner har en mängd gest- och knappåtgärder som du kan stänga av eller stänga av i Inställningar, som dubbelknacka för att väcka eller dubbeltrycka Hem / ström för kameran. Medan du lägger till Bluetooth-kontroller till den här listan kan förlänga och komplicera den, om Android-systemet skulle erkänna och rikta KeyEvent till en specifik app snarare än att sända en generisk signal till vad mottagare lyssnar (eller inte), skulle vi kunna säkerställa konsistens. Vi har sett detta gjort på enheter tidigare, till exempel genom att öppna Moto Assist att slå på en utsedd musikapp när den ansluts till din bils Bluetooth.
Att ändra hur Android hanterar medieknappar - och hanterar knappsingångar övergripande, eftersom Bluetooth-kontroller och tangentbord stöter på egna problem - kan skapa så många nya problem som det löser, men med tanke på antalet platser saker kan - och göra - gå fel i det nuvarande systemet, kan det vara värt att bryta äggen för att göra en ny omelett.
I slutet av dagen vill vardagliga användare inte gräva in nyckelkommandon, mottagare och vilken app som har ljudfokus just nu. Vi vill att vårt fokus ska vara på själva musiken och där den tar oss. Och om jag inte kan slå på musiken som håller mig mjukt på högt och trångt platser vid första försöket, är jag inte en glad tjej. Och jag slår vad om att jag inte är den enda.
Vi kan tjäna en provision för inköp med våra länkar. Läs mer.