2010-09-01 10 views

risposta

6

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.

+0

Ciao Fredley, grazie per il tuo suggerimento. – Eby

+0

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

+1

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

11

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); 
} 
}; 
} 
+0

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! –

+0

funziona solo per Google Play Music. Come posso ottenere informazioni per altri giocatori mentre gioco? –

-1

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; 
} 
+0

La domanda OP era di recuperare i dettagli del brano che sta riproducendo nell'oggetto MediaPlayer. Questa è una risposta diversa. –