C'è un modo per ottenere i dettagli della canzone corrente riprodotta da MediaPlayer?Come ottenere i dettagli di riproduzione correnti da MediaPlayer
risposta
Non è disponibile il numero documented method per ottenere informazioni sul file attualmente riprodotto da un'istanza di MediaPlayer, è necessario rendere l'app memorizzata in tale informazione in un altro modo. Se stai utilizzando un servizio per tenere traccia dell'istanza di MediaPlayer (che consiglio), non dovrebbe essere troppo difficile.
Ciao Fredley, grazie per il tuo suggerimento. – Eby
Riesco a vedere molti widget che mostrano i dettagli del brano come si vede in http://developer.android.com/guide/topics/appwidgets/index.html questo widget. – Eby
Sì. E? I widget musicali sono progettati per integrarsi con un determinato lettore e non è possibile integrare facilmente il proprio widget con un altro lettore multimediale. – fredley
Penso che sia necessario avere le proprie classi modello da cui è possibile impostare e ottenere il titolo della canzone. Per questa e altre informazioni, consultare la domanda Overflow di stack:
How to set the PlayList Index for Mediaplayer(ExpressionMediaPlayer:Mediaplayer).
Se sei interessato a sapere come viene implementato, puoi ottenere il source e vedere come sono stati implementati.
Solo per riferimento, questo funziona:
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
public class MediaPlayer extends Activity {
public static final String SERVICECMD = "com.android.music.musicservicecommand";
public static final String CMDNAME = "command";
public static final String CMDTOGGLEPAUSE = "togglepause";
public static final String CMDSTOP = "stop";
public static final String CMDPAUSE = "pause";
public static final String CMDPREVIOUS = "previous";
public static final String CMDNEXT = "next";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
IntentFilter iF = new IntentFilter();
iF.addAction("com.android.music.metachanged");
iF.addAction("com.android.music.playstatechanged");
iF.addAction("com.android.music.playbackcomplete");
iF.addAction("com.android.music.queuechanged");
registerReceiver(mReceiver, iF);
}
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
String cmd = intent.getStringExtra("command");
Log.d("mIntentReceiver.onReceive ", action + "/" + cmd);
String artist = intent.getStringExtra("artist");
String album = intent.getStringExtra("album");
String track = intent.getStringExtra("track");
Log.d("Music",artist+":"+album+":"+track);
}
};
}
Non ho avuto fortuna a registrarmi per il destinatario della trasmissione (usando il tuo codice) e poi giocare un MP3 con MediaPlayer - nessuna trasmissione è stata ricevuta! –
funziona solo per Google Play Music. Come posso ottenere informazioni per altri giocatori mentre gioco? –
ho imparato come farlo proprio adesso, quindi non so se funziona su tutte le versioni di Android ancora.
private void getTrackInfo(Uri audioFileUri) {
MediaMetadataRetriever metaRetriever= new MediaMetadataRetriever();
metaRetriever.setDataSource(getRealPathFromURI(audioFileUri));
String artist = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
String title = metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
}
private String getRealPathFromURI(Uri uri) {
File myFile = new File(uri.getPath().toString());
String s = myFile.getAbsolutePath();
return s;
}
La domanda OP era di recuperare i dettagli del brano che sta riproducendo nell'oggetto MediaPlayer. Questa è una risposta diversa. –
La tua istanza di MediaPlayer nella tua app o da un'altra app? – fredley