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.
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.
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.
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.
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.
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ță.
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 ArrayListlistă 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 ();
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.
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.
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 ArrayListcâ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, ArrayListSongs) 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
.
Î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.
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