Creați un Player de muzică pe Android Configurarea proiectului

Platforma Android oferă resurse pentru gestionarea redării media, pe care aplicațiile dvs. le pot utiliza pentru a crea o interfață între utilizator și fișierele muzicale. În această serie de tutori, vom crea o aplicație de bază pentru muzică pentru Android. Aplicația va prezenta o listă de melodii pe dispozitivul utilizatorului, astfel încât utilizatorul să poată selecta melodiile pe care să le cânte. Aplicația va afișa, de asemenea, comenzi pentru interacțiunea cu redarea și va continua să fie redată când utilizatorul se îndepărtează de aplicație, cu o notificare afișată în timp ce redarea scade.

Căutați o soluție rapidă?

Dacă doriți o soluție rapidă, există o mare colecție de șabloane de aplicații pentru Android de la Envato Market. 

În special, acest șablon de aplicație Android Music Player este o modalitate excelentă de a începe să construiți propria aplicație. "Lite Music" este un șablon de aplicație premium în Android, cu o interfață curată, simplă și elegantă de folosit.

Introducere

Construirea playerului muzical va implica utilizarea ContentResolver pentru a recupera piesele de pe dispozitiv, Media Player clasa pentru a reda audio și MediaController pentru a controla redarea. Vom folosi de asemenea a Serviciu exemplu pentru a reda audio atunci când utilizatorul nu interacționează direct cu aplicația. Ar trebui să puteți finaliza această serie dacă sunteți un dezvoltator intermediar Android, deci dacă ați construit deja câteva aplicații, atunci această serie nu ar trebui să fie o problemă pentru dvs. Iată o previzualizare a aplicației finale:


În acest tutorial, vom crea aplicația și vom interoga dispozitivul utilizatorului pentru fișiere audio utilizând ContentResolver și Cursor clase. În următoarea parte, vom folosi un adaptor exemplu pentru a prezenta melodiile într-o vizualizare de listă, pornind de la redare atunci când utilizatorul întrerupe un element din listă. În ultima tranșă a acestei serii, vom folosi MediaController pentru a oferi utilizatorului control asupra redării, a implementa funcții pentru a sări înapoi și înapoi și include o funcție de amestecare. După această serie, vom explora alte aspecte ale redării media care pot îmbunătăți aplicația, cum ar fi gestionarea focalizării audio, prezentarea fișierelor media în moduri diferite și redarea conținuturilor media streaming.

1. Creați și configurați un nou proiect

Pasul 1

Creați un nou proiect Android. Dacă utilizați Eclipse, lăsați IDE (Integrated Development Environment) să creeze un mediu principal Activitate clasă și aspect pentru dvs. Pentru o parte din codul pe care îl folosim în serie, veți avea nevoie de un nivel minim de API de 16, deci va trebui să luați pași suplimentari pentru a accepta versiuni mai vechi. Odată ce proiectul dvs. este creat, deschideți fișierul Manifest al proiectului. În interiorul manifesta element, adăugați următoarea permisiune:

Vom folosi această permisiune pentru a permite ca redarea muzicii să continue atunci când dispozitivul utilizatorului nu mai funcționează. Manifestul dvs. ar trebui să conțină deja un element pentru principalul dvs. Activitate clasă. Adăugați următoarele atribute la activitate element pentru a seta orientarea ecranului și launchMode:

Vom rămâne orientați spre portret pentru simplitate. launchMode va ajuta procesul de navigare înapoi la aplicație după mutarea de la ea. Vom afișa o notificare care indică melodia curentă, atingând notificarea va duce utilizatorul înapoi la aplicație. De asemenea, vom folosi a Serviciu pentru redarea muzicii. Adăugați următoarea linie la Manifestul proiectului din interiorul cerere element și după activitate element:

Modificați numele pachetului în funcție de propriul dvs. și schimbați numele clasei dacă doriți.

Pasul 2

Deschideți fișierul de aspect principal al proiectului și înlocuiți conținutul cu următorul aspect:

   

Asigurați-vă că modificați instrumente: Contextul dacă atributul principal Activitate clasa este denumită diferit. Aspectul include a ListView în care vom prezenta lista melodiilor.

Vom include două elemente de meniu pentru comutarea funcției Shuffle și pentru ieșirea din aplicație. Deschideți fișierul din meniul principal (res / meniu / main.xml) și înlocuiți conținutul cu următoarele:

   

Dacă preferați, puteți stoca șirurile de titlu în res / valori / strings.xml fişier. Cele două elemente se referă la fișiere care pot fi desenate. Creați-vă propriile sau utilizați aceste două imagini pentru a începe cu:



De asemenea, vom folosi o pictogramă pentru afișarea în notificarea de redare. Creați unul acum sau utilizați unul de mai jos:


Codul se va referi la imaginile folosind numele Rand, Sfârșit, și Joaca Asigurați-vă că utilizați aceleași nume de fișiere. Copiați imaginile în folderul (ile) desenat (e) al proiectului. Vom implementa acțiunile mai târziu.

2. Cereți dispozitivul pentru melodii

Pasul 1

Să interogăm dispozitivul utilizatorului pentru fișierele audio. Mai întâi, adăugați o nouă clasă la proiectul dvs., numind-o Cântec. Vom folosi această clasă pentru a modela datele pentru un singur fișier audio. În interiorul declarației de clasă, adăugați trei variabile de instanță pentru datele pe care doriți să le stocăm pentru fiecare piesă:

id id privat; titlu String privat; artist privat de coarde;

Apoi, adăugați o metodă constructor în care instanțiăm variabilele de instanță:

cântecul public (lungă piesă de melodie, melodie de text String, song String Artist) id = songID; title = titlul cântecului; artist = songArtist; 

În cele din urmă, adăugați obține metode pentru variabilele de instanță:

public long getID () return id; public String getTitle () retur titlul; public String getArtist () return artist;

Dacă intenționați să utilizați mai multe informații despre piesă, atunci sunteți liber să adăugați în clasă alte variabile de instanță.

Pasul 2

Deschideți principalul Activitate și adăugați următoarele importuri:

import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; importul android.net.Uri; import android.content.ContentResolver; import android.database.Cursor; importă android.widget.ListView;

Declarați următoarele variabile de instanță înainte de onCreate metodă:

privat ArrayList listă de cântece; privat ListView songView;

Vom stoca melodiile într - o listă și le vom afișa în ListView instanță în structura principală. În onCreate, după ce ați setat afișarea conținutului, extrageți ListView utilizând ID-ul pe care l-am dat în structura principală:

songView = (ListăVizualizare) findViewById (R.id.song_list);

Instanțiați lista după cum se arată mai jos:

songList = noul ArrayList();

În continuare, în principiu Activitate declarația de clasă, după metodele existente, creează o metodă de ajutor pentru a prelua informațiile fișierului audio:

public void getSongList () // retur informații despre melodie

În cadrul acestei metode, creați un ContentResolver instanță, extrageți URI-ul pentru fișierele muzicale externe și creați un Cursor instanță folosind ContentResolver instanță pentru interogarea fișierelor muzicale:

ConținutulResolver musicResolver = getContentResolver (); Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Cursor musicCursor = muzicăResolver.query (musicUri, null, null, null, null);

Acum putem itera asupra rezultatelor, verificând mai întâi că avem date valide:

dacă (musicCursor! = null && musicCursor.moveToFirst ()) // primi coloane int titleColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media.TITLE); int idColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media.ID); int artistColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media.ARTIST); // adăugați melodii în listă do long thisId = musicCursor.getLong (idColumn); String thisTitle = musicCursor.getString (titleColumn); String thisArtist = musicCursor.getString (artistColumn); songList.add (un nou Song (thisId, thisTitle, thisArtist));  în timp ce (musicCursor.moveToNext ()); 

Mai întâi extragem indexurile coloanelor pentru elementele de date de care suntem interesați pentru fiecare melodie, apoi le folosim pentru a crea un nou Cântec obiecte și adăugați-le în listă, înainte de a continua să le cuplați rezultatele.

Înapoi în onCreate, după codul pe care l-am adăugat, apelați această nouă metodă:

getSongList ();

3. Afișați melodiile

Pasul 1

Acum putem afișa lista melodiilor din interfața cu utilizatorul. În onCreate după ce am sunat la metoda de ajutor pe care am creat-o acum un moment, să sortăm datele astfel încât melodiile să fie prezentate în ordine alfabetică:

Collections.sort (songList, comparator nou() public int compare (Cântec a, Cântec b) return a.getTitle () compareTo (b.getTitle ()); );

Noi folosim titlu variabilă în Cântec clasa, folosind obține metodele pe care le-am adăugat, pentru a pune în aplicare a comparaţie metoda, sortarea melodiilor după titlu.

Pasul 2

Să definim un aspect pentru a reprezenta fiecare cântec din listă. Adăugați un fișier nou la proiectul dvs. res / aspect folder, numind-o song.xml și introduceți următoarele:

   

Simțiți-vă liber să modificați aspectul în funcție de preferințele dvs. Fiecare melodie din listă va fi reprezentată de șirul de titlu și de textul artistului, astfel încât vom folosi TextViews pentru a afișa aceste date. Observați că LinearLayout tag-ul de deschidere listează un onClick atribut. Vom folosi această metodă în principal Activitate clasa pentru a răspunde la interceptarea utilizatorilor de pe melodiile din listă, redând melodia reprezentată de elementul de listă care a fost accesat.

Pasul 3

Vom folosi un adaptor pentru a mapa melodiile în vizualizarea listei. Adăugați o clasă nouă în aplicația dvs., numind-o SongAdapter sau alt nume la alegere. La crearea clasei, dă-i superclajul android.widget.BaseAdapter. Eclipse ar trebui să introducă următoarea schiță:

clasa publica SongAdapter se extinde la BaseAdapter @Override public int getCount () // TODO Metoda generata automat de stub return 0;  @ Obiectul obiect obiect obiect getItem (int arg0) // TODO Metoda generată automat de stub return null;  @Override public long getItemId (int arg0) // TODO Metoda generata automat de stub return 0;  @Override public Vizualizare getView (int arg0, Vizualizare arg1, ViewGroup arg2) // TODO Metoda generata automat de stub return null; 

Va trebui să adăugați următoarele importuri:

import java.util.ArrayList; importați android.content.Context; import șiroid.view.LayoutInflater; importă android.widget.LinearLayout; import șiroid.widget.TextView;

În interiorul declarației de clasă, declarați următoarele variabile de instanță:

privat ArrayList cântece; privat LayoutInflater songInf;

Vom trece lista melodiilor din lista principală Activitate clasați și utilizați LayoutInflater pentru a mapa șirurile de titlu și de artist la TextViews în aspectul cântecului pe care l-am creat.

După variabilele instanței, dați adaptorului o metodă constructor pentru a le instanțiza:

public SongAdapter (Context c, ArrayList Songs) songs = TheSongs; songInf = LayoutInflater.from (c); 

Modificați conținutul getCount pentru a returna dimensiunea listei:

@Overire publică int getCount () return songs.size (); 

Puteți să părăsiți getItem și getItemId metode neatinse. Actualizați punerea în aplicare a getView după cum se arată mai jos:

@Override public Vizualizați getView (poziția int, Vizualizare convertView, ViewGroup părinte) // harta pentru aspectul melodiei LinearLayout songLay = (LinearLayout) songInf.inflate (R.layout.song, parent, false); // obține titlul și vizualizările artistului TextView songView = (TextView) songLay.findViewById (R.id.song_title); TextView artistView = (TextView) cântecLay.findViewById (R.id.song_artist); // a lua melodia folosind pozitia Song currSong = songs.get (pozitie); // obțineți titluri și fișiere artist songView.setText (currSong.getTitle ()); artistView.setText (currSong.getArtist ()); // setați poziția ca tag songLay.setTag (position); retur melodie; 

Am setat titlul și textul artistului prin preluarea textului corect Cântec instanță din listă utilizând indexul poziției, mapând aceste șiruri la vederile pe care le-am adăugat la fișierul de aspect al cântecului. De asemenea, setăm poziția ca etichetă de vizionare, care ne va permite să jucăm piesa corectă atunci când utilizatorul face clic pe un element din listă. Amintiți-vă că song.xml aspectul fișierului a inclus onClick atribut. Vom folosi metoda enumerată acolo pentru a prelua eticheta în Activitate.

Pasul 3

Înapoi în principal Activitate clasă, în onCreate după sortarea listei, creați o nouă instanță a adaptor și a setat-o ​​pe ListView:

SongAdapter songAdt = nou SongAdapter (acest SongList); songView.setAdapter (songAdt);

Când rulați aplicația, ar trebui să prezinte lista melodiilor de pe dispozitiv, făcând clic pe ele va cauza aplicației o excepție în acest moment, dar vom implementa funcția de gestionare a clicurilor în tutorialul următor.

Concluzie

Acum am setat aplicația pentru a citi melodiile de pe dispozitivul utilizatorului. În următoarea parte, vom începe redarea când utilizatorul selectează o melodie folosind Media Player clasă. Vom implementa redarea folosind a Serviciu astfel încât acesta să continue în timp ce utilizatorul interacționează cu alte aplicații. În cele din urmă, vom folosi a MediaController pentru a oferi utilizatorului control asupra redării.

Dacă vreodată aveți nevoie de ajutor suplimentar pentru proiectele de dezvoltare a aplicațiilor Android, puteți găsi dezvoltatori experimentați Android de la Envato Studio pentru a vă ajuta cu totul, de la design-ul UI la crearea unei aplicații native Android.

Dezvoltatorii Android de pe Envato Studio
Cod