[Android] Aplikacja w tle, włączająca muzykę po podłączeniu słuchawek.
Ilekroć wsiadam do samochodu, zawsze pierwszym co robię (oprócz modlenia się żeby odpalił) jest podłączenie telefonu i włączenie muzyki. Zawsze była najważniejszą częścią mojego życia. Niestety zajmuje to sporo czasu, bo telefon jaki posiadam doprowadziłem do stanu istnej cegły. Dlatego postanowiłem napisać jak najlżejszą aplikacje, działającą w tle, która odrobinę zautomatyzuje mi ten proces.
3. Rozszerzamy klasę o funkcje Serwis (extends Service) oraz definiujemy metodę IBinder, która pozwoli nam powiązać naszą aktywność z serwisem. Wszystkie biblioteki zostaną dodane automatycznie przez Android Studio.
4. Definiujemy metodę OnStartCommand, która będzie wykonywana po naciśnięciu przycisku "Start". Na razie będzie tam tylko Toast (komunikat z wiadomością), informujący nas że serwis działa.
5. Teraz metoda która zakończy serwis po naciśnięciu przycisku "Stop". OnDestroy. Tym razem zostanie w niej tylko Toast z informacją, samo jej wywołanie w MainActivity spowoduje zakończenie serwisu.
Póki co tyle w pliku z serwisem, teraz MainActivity i przyciski.
6. Tworzymy dwa przyciski, Start i Stop w activity_main,xml.
7. W tekstowym odwzorowaniu activity_main,xml dodajemy obu przyciskom atrybuty android:onClick="Nazwa".
8. Jest to chyba najprostsza metoda wywołania akcji po kliknięciu przyciskiem jaką znalazłem. Teraz wystarczy tylko napisać wywołania metody OnClick w MainAcitivity.java.
9. To co będzie w tych właśnie funkcjach, będzie się wykonywało po kliknięciu przycisku, więc zakodujemy w nich rozpoczęcie serwisu oraz jego zakończenie.
10. Zanim przetestujemy naszą apkę musimy jeszcze dodać wpis w AndroidManifest.xml pozwalający serwisowi pracować.
11. Teraz po skompilowaniu, otworzeniu apki i kliknięciu przycisku, ukaże nam się chwalebny Toast.
Mamy działający serwis, oraz przyciski, teraz czas na wywołanie reakcji na podłączenie słuchawek do telefonu.
12. Budujemy MusicIntentReciver, który będzie spełniał tą funkcje. W jego wnętrzu, póki co jest tylko zadeklarowana paczka z aplikacją którą będziemy odpalać, jest to nazwa folderu w której aplikacja jest zainstalowana na telefonie, w moim przypadku (tidal) "com.aspiro.tidal"
Analogicznie jeśli chcemy otwierać np Spotify, w miejsce ścieżki wpisujemy "com.spotify.music"
13. W metodzie onReceive budujemy teraz pętle sprawdzającą jaki jest stan słuchawek.
14. W miejscu przypadku case 1; gdzie słuchawki są określone jako podłączone, kodujemy odwołanie do wcześniej zadeklarowanej paczki z aplikacją, wywołując jej odpalenie.
Teraz aplikacja potrafi rozpoznać kiedy słuchawki zostały podłączone, ale żeby działało to prawidłowo w tle, musimy zbudować jeszcze Thread, w którym będzie działał serwis. To taki osobny proces pozwalający wywoływać działanie bez interferencji z systemem.
15. Oto Thread, nadal w pliku z naszym serwisem. Musi mieć zadeklarowaną funkcje run(), oraz MyThreadClass() w której nadajemy Id naszemu serwisowi.
16. W funkcji run(), musimy zadeklarować myReciver (do którego odniesieniem się zaraz zajmiemy), oraz IntentFilter z naszym narzędziem do wykrywania stanu słuchawek Intent.ACTION_HEADSET_PLUG.
17. Deklarujemy myReciver, oraz TAG, używany później w pętli.
Nasz kod jest już w zasadzie gotowy, wystarczy tylko wywołać Thread w funkcji OnStartCommand serwisu i będzie działać.
Hexslav
- Pierwszym co trzeba zrobić to oczywiście podłączyć telefon i włączyć tryb debuggowania, następnie odpalić nowy projekt w AndroidStudio.
- Startujemy na czystym projekcie. Zaczniemy od stworzenia nowej klasy .java "KapitanPiratow.java". W tym pliku zakodujemy cały nasz serwis, odpowiedzialny za działanie aplikacji w tle.
// com.examle.hexslav.tidalon/PPM/New/Java Class
3. Rozszerzamy klasę o funkcje Serwis (extends Service) oraz definiujemy metodę IBinder, która pozwoli nam powiązać naszą aktywność z serwisem. Wszystkie biblioteki zostaną dodane automatycznie przez Android Studio.
4. Definiujemy metodę OnStartCommand, która będzie wykonywana po naciśnięciu przycisku "Start". Na razie będzie tam tylko Toast (komunikat z wiadomością), informujący nas że serwis działa.
5. Teraz metoda która zakończy serwis po naciśnięciu przycisku "Stop". OnDestroy. Tym razem zostanie w niej tylko Toast z informacją, samo jej wywołanie w MainActivity spowoduje zakończenie serwisu.
Póki co tyle w pliku z serwisem, teraz MainActivity i przyciski.
6. Tworzymy dwa przyciski, Start i Stop w activity_main,xml.
7. W tekstowym odwzorowaniu activity_main,xml dodajemy obu przyciskom atrybuty android:onClick="Nazwa".
9. To co będzie w tych właśnie funkcjach, będzie się wykonywało po kliknięciu przycisku, więc zakodujemy w nich rozpoczęcie serwisu oraz jego zakończenie.
10. Zanim przetestujemy naszą apkę musimy jeszcze dodać wpis w AndroidManifest.xml pozwalający serwisowi pracować.
11. Teraz po skompilowaniu, otworzeniu apki i kliknięciu przycisku, ukaże nam się chwalebny Toast.
Mamy działający serwis, oraz przyciski, teraz czas na wywołanie reakcji na podłączenie słuchawek do telefonu.
12. Budujemy MusicIntentReciver, który będzie spełniał tą funkcje. W jego wnętrzu, póki co jest tylko zadeklarowana paczka z aplikacją którą będziemy odpalać, jest to nazwa folderu w której aplikacja jest zainstalowana na telefonie, w moim przypadku (tidal) "com.aspiro.tidal"
Analogicznie jeśli chcemy otwierać np Spotify, w miejsce ścieżki wpisujemy "com.spotify.music"
13. W metodzie onReceive budujemy teraz pętle sprawdzającą jaki jest stan słuchawek.
14. W miejscu przypadku case 1; gdzie słuchawki są określone jako podłączone, kodujemy odwołanie do wcześniej zadeklarowanej paczki z aplikacją, wywołując jej odpalenie.
Teraz aplikacja potrafi rozpoznać kiedy słuchawki zostały podłączone, ale żeby działało to prawidłowo w tle, musimy zbudować jeszcze Thread, w którym będzie działał serwis. To taki osobny proces pozwalający wywoływać działanie bez interferencji z systemem.
15. Oto Thread, nadal w pliku z naszym serwisem. Musi mieć zadeklarowaną funkcje run(), oraz MyThreadClass() w której nadajemy Id naszemu serwisowi.
16. W funkcji run(), musimy zadeklarować myReciver (do którego odniesieniem się zaraz zajmiemy), oraz IntentFilter z naszym narzędziem do wykrywania stanu słuchawek Intent.ACTION_HEADSET_PLUG.
17. Deklarujemy myReciver, oraz TAG, używany później w pętli.
Nasz kod jest już w zasadzie gotowy, wystarczy tylko wywołać Thread w funkcji OnStartCommand serwisu i będzie działać.
Hexslav
Komentarze
Prześlij komentarz