La piattaforma Android fornisce risorse per la gestione della riproduzione multimediale, che le tue app possono utilizzare per creare un'interfaccia tra l'utente e i file musicali. In questa serie di tutorial, creeremo un'applicazione di base per lettori musicali per Android. L'app presenterà un elenco di brani sul dispositivo dell'utente, in modo che l'utente possa selezionare i brani da riprodurre. L'app presenterà anche i controlli per interagire con la riproduzione e continuerà a essere riprodotta quando l'utente si allontana dall'app, con una notifica visualizzata mentre è scaduto il playback.
Se stai cercando una soluzione rapida, c'è una grande collezione di modelli di app per Android su Envato Market.
In particolare, questo modello di app Android Music Player è un ottimo modo per iniziare a creare la tua app. "Lite Music" è un modello di app premium player in Android, con un'interfaccia pulita, semplice ed elegante da usare.
Costruire il lettore musicale comporterà l'uso di ContentResolver
classe per recuperare tracce sul dispositivo, il Media Player
classe per riprodurre audio e il MediaController
classe per controllare la riproduzione. Useremo anche a Servizio
istanza per riprodurre l'audio quando l'utente non interagisce direttamente con l'app. Dovresti essere in grado di completare questa serie se sei uno sviluppatore Android intermedio, quindi se hai già creato alcune app, questa serie non dovrebbe essere un problema per te. Ecco un'anteprima dell'app finale:
In questo tutorial, creeremo l'app e interrogeremo il dispositivo dell'utente per i file audio usando il ContentResolver
e Cursore
classi. Nella parte successiva, useremo un Adattatore
istanza per presentare i brani in una visualizzazione elenco, avviando la riproduzione quando l'utente tocca un elemento dall'elenco. Nell'ultima parte di questa serie, useremo il MediaController
classe per dare all'utente il controllo sulla riproduzione, implementare le funzioni per saltare avanti e indietro e includere una funzione shuffle. Dopo questa serie, esploreremo altri aspetti della riproduzione multimediale che possono migliorare l'app, come la gestione dell'audio focus, la presentazione di file multimediali in diversi modi e la riproduzione di streaming media.
Crea un nuovo progetto Android. Se si utilizza Eclipse, lasciare che l'IDE (Integrated Development Environment) crei un main Attività
file di classe e di layout per te. Per parte del codice che utilizziamo nella serie, è necessario un livello API minimo di 16, quindi sarà necessario adottare ulteriori passaggi per supportare versioni precedenti. Una volta creato il progetto, apri il file Manifest del progetto. Dentro il manifesto
elemento, aggiungi la seguente autorizzazione:
Useremo questa autorizzazione per consentire alla riproduzione della musica di continuare quando il dispositivo dell'utente diventa inattivo. Il tuo Manifest dovrebbe già contenere un elemento per il tuo principale Attività
classe. Aggiungi i seguenti attributi al attività
elemento per impostare il orientamento schermo
e launchMode
:
Ci atteniamo all'orientamento verticale per semplicità. Il launchMode
aiuterà il processo di navigazione verso l'app dopo essersi allontanati da esso. Visualizzeremo una notifica che indica il brano attualmente in riproduzione, toccando la notifica l'utente tornerà all'app. Useremo anche a Servizio
classe per la riproduzione musicale. Aggiungi la seguente linea al Manifesto del progetto all'interno del applicazione
elemento e dopo il attività
elemento:
Modificare il nome del pacchetto per adattarlo al proprio e modificare il nome della classe, se lo si desidera.
Apri il file di layout principale del progetto e sostituiscilo con il seguente layout:
Si assicura di modificare il Strumenti: contesto attributo se il tuo principale Attività
la classe è nominata diversamente. Il layout include a Visualizzazione elenco
in cui presenteremo la lista delle canzoni.
Includeremo due voci di menu per la commutazione della funzione shuffle e per l'uscita dall'app. Apri il tuo file di menu principale (res / menu / main.xml) e sostituire il suo contenuto con quanto segue:
Se si preferisce, è possibile memorizzare le stringhe del titolo in res / valori / strings.xml file. I due elementi si riferiscono a file disegnabili. Crea il tuo o usa queste due immagini per iniziare:
Useremo anche un'icona per visualizzare la notifica di riproduzione. Creane uno ora o usa quello qui sotto:
Il codice farà riferimento alle immagini usando i nomi rand, fine, e giocare quindi assicurati di utilizzare gli stessi nomi di file. Copia le immagini nella / e cartella / e dei disegni del tuo progetto. Implementeremo le azioni in seguito.
Esaminiamo il dispositivo dell'utente per i file audio. Innanzitutto, aggiungi una nuova classe al tuo progetto, nominandolo Canzone
. Useremo questa classe per modellare i dati per un singolo file audio. All'interno della dichiarazione di classe, aggiungi tre variabili di istanza per i dati che vogliamo memorizzare per ogni traccia:
privato lungo id; titolo String privato; artista String privato;
Successivamente, aggiungi un metodo di costruzione in cui istanziamo le variabili di istanza:
song pubblica (long songID, String songTitle, String songArtist) id = songID; title = songtitle; artista = songArtist;
Infine, aggiungi ottenere metodi per le variabili di istanza:
public long getID () return id; public String getTitle () return title; public pubblico getArtist () return artist;
Se si prevede di utilizzare più informazioni sulla traccia, è possibile aggiungere ulteriori variabili di istanza alla classe.
Apri il main Attività
classe e aggiungere le seguenti importazioni:
import java.util.ArrayList; importare java.util.Collections; importare java.util.Comparator; import android.net.Uri; import android.content.ContentResolver; import android.database.Cursor; import android.widget.ListView;
Dichiarare le seguenti variabili di istanza prima del onCreate
metodo:
ArrayList privatolista delle canzoni; ListView di brani privati;
Conserveremo le canzoni in una lista e le mostreremo nel Visualizzazione elenco
istanza nel layout principale. Nel onCreate
, dopo aver impostato la vista del contenuto, recuperare il Visualizzazione elenco
istanza usando l'ID che abbiamo dato nel layout principale:
songView = (ListView) findViewById (R.id.song_list);
Istanziare l'elenco come mostrato di seguito:
songList = new ArrayList();
Avanti, nel principale Attività
dichiarazione di classe, dopo i metodi esistenti, creare un metodo di supporto per recuperare le informazioni del file audio:
public void getSongList () // recupera informazioni sul brano
All'interno di questo metodo, crea un ContentResolver
istanza, recuperare l'URI per i file musicali esterni e creare a Cursore
istanza usando il ContentResolver
istanza per interrogare i file musicali:
ContentResolver musicResolver = getContentResolver (); Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Cursor musicCursor = musicResolver.query (musicUri, null, null, null, null);
Ora possiamo scorrere i risultati, verificando prima di avere dati validi:
if (musicCursor! = null && musicCursor.moveToFirst ()) // get columns 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); // aggiungi brani alla lista do long thisId = musicCursor.getLong (idColumn); String thisTitle = musicCursor.getString (titleColumn); String thisArtist = musicCursor.getString (artistColumn); songList.add (nuova canzone (thisId, thisTitle, thisArtist)); while (musicCursor.moveToNext ());
Per prima cosa recuperiamo gli indici delle colonne per gli elementi di dati che ci interessano per ogni canzone, quindi li usiamo per creare un nuovo Canzone
oggetto e aggiungerlo alla lista, prima di continuare a scorrere i risultati.
Di nuovo dentro onCreate
, dopo il codice aggiunto, chiama questo nuovo metodo:
getSongList ();
Ora possiamo visualizzare l'elenco di brani nell'interfaccia utente. Nel onCreate
metodo, dopo aver chiamato il metodo helper che abbiamo creato un momento fa, ordiniamo i dati in modo che i brani siano presentati in ordine alfabetico:
Collections.sort (elenco canzoni, nuovo comparatore() public int compare (Song a, Song b) return a.getTitle (). compareTo (b.getTitle ()); );
Noi usiamo il titolo
variabile nel Canzone
classe, usando il ottenere metodi che abbiamo aggiunto, per implementare a confrontare
metodo, ordinando i brani per titolo.
Definiamo un layout per rappresentare ogni canzone nell'elenco. Aggiungi un nuovo file al tuo progetto res / layout di cartella, nominandola song.xml e inserendo quanto segue:
Sentiti libero di modificare il layout in base alle tue preferenze. Ogni canzone nell'elenco sarà rappresentata da stringhe di testo e artista, quindi useremo il TextViews
per visualizzare questi dati. Si noti che il LinearLayout
aprire le liste di tag al clic
attributo. Useremo questo metodo nel modo principale Attività
classe per rispondere ai tocchi utente sui brani nell'elenco, riproducendo il brano rappresentato dalla voce di elenco che è stata toccata.
Useremo un Adattatore
per mappare le canzoni alla vista elenco. Aggiungi una nuova classe alla tua app, nominandola SongAdapter o un altro nome a tua scelta. Quando crei la classe, dagli la superclasse android.widget.BaseAdapter
. Eclipse dovrebbe inserire il seguente schema:
public class SongAdapter estende BaseAdapter @Override public int getCount () // TODO Metodo generato automaticamente stub return 0; @Override oggetto pubblico getItem (int arg0) // TODO Metodo generato automaticamente stub return null; @Override public long getItemId (int arg0) // TODO Metodo generato automaticamente stub return 0; @Override public Visualizza getView (int arg0, Visualizza arg1, ViewGroup arg2) // TODO Metodo generato automaticamente stub return null;
Dovrai aggiungere le seguenti importazioni:
import java.util.ArrayList; importare android.content.Context; import android.view.LayoutInflater; import android.widget.LinearLayout; import android.widget.TextView;
All'interno della dichiarazione della classe, dichiarare le seguenti variabili di istanza:
ArrayList privatocanzoni; privato LayoutInflater songInf;
Passeremo la lista dei brani dal principale Attività
classe e usa il LayoutInflater
mappare il titolo e le stringhe dell'artista al TextViews
nel layout del brano che abbiamo creato.
Dopo le variabili di istanza, fornire all'adattatore un metodo di costruzione per istanziarle:
SongAdapter pubblico (Context c, ArrayListtheSongs) songs = theSongs; songInf = LayoutInflater.from (c);
Modificare il contenuto del getCount
metodo per restituire la dimensione della lista:
@Override public int getCount () return songs.size ();
Puoi lasciare il getItem
e getItemId
metodi intatti. Aggiorna l'implementazione di GetView
metodo come mostrato di seguito:
@Override public Visualizza getView (int position, Visualizza convertView, ViewGroup parent) // mappa nel layout del brano LinearLayout songLay = (LinearLayout) songInf.inflate (R.layout.song, parent, false); // ottiene viste titolo e artista TextView songView = (TextView) songLay.findViewById (R.id.song_title); TextView artistView = (TextView) songLay.findViewById (R.id.song_artist); // ascolta la canzone usando la posizione Song currSong = songs.get (posizione); // ottiene le stringhe title e artist songView.setText (currSong.getTitle ()); artistView.setText (currSong.getArtist ()); // imposta la posizione come tag songLay.setTag (posizione); return songLay;
Impostiamo il titolo e il testo dell'artista recuperando il corretto Canzone
istanza dall'elenco usando l'indice di posizione, mappando queste stringhe alle viste che abbiamo aggiunto al file di layout del brano. Impostiamo anche la posizione come tag vista, che ci consentirà di riprodurre la canzone corretta quando l'utente fa clic su un elemento nell'elenco. Ricorda che il song.xml file di layout incluso al clic
attributo. Useremo il metodo elencato lì per recuperare il tag nel Attività
.
Indietro nel principale Attività
classe, nel onCreate
metodo dopo aver ordinato l'elenco, creare una nuova istanza di Adattatore
classe e impostarlo su Visualizzazione elenco
:
SongAdapter songAdt = new SongAdapter (this, SongList); songView.setAdapter (songAdt);
Quando esegui l'app, dovrebbe presentare l'elenco di brani sul dispositivo, facendo clic su di essi l'app genera un'eccezione al momento, ma implementeremo il gestore di clic nel prossimo tutorial.
Ora abbiamo impostato l'app per leggere i brani dal dispositivo dell'utente. Nella parte successiva, inizieremo la riproduzione quando l'utente seleziona una canzone usando il Media Player
classe. Implementeremo la riproduzione usando a Servizio
classe in modo che continui mentre l'utente interagisce con altre app. Infine, useremo a MediaController
classe per dare all'utente il controllo sulla riproduzione.
Se hai bisogno di ulteriore aiuto con i tuoi progetti di sviluppo di app Android, puoi trovare sviluppatori Android esperti su Envato Studio per aiutarti con tutto, dalla progettazione dell'interfaccia utente alla creazione di un'applicazione Android nativa.
Sviluppatori Android su Envato Studio