2012-05-09 10 views
31

Sto implementando un'applicazione per ottenere informazioni sulla traccia musicale corrente.Informazioni sulla traccia della musica attualmente in riproduzione

Sto usando il seguente codice per ottenere che:

public class CurrentMusicTrackInfoActivity extends Activity { 

    public static final String SERVICECMD = "com.android.music.musicservicecommand"; 

    @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.v("tag ", action + "/" + cmd); 
      String artist = intent.getStringExtra("artist"); 
      String album = intent.getStringExtra("album"); 
      String track = intent.getStringExtra("track"); 
      Log.v("tag", artist + ":" + album + ":" + track); 
      Toast.makeText(CurrentMusicTrackInfoActivity.this, track, Toast.LENGTH_SHORT).show(); 
     } 
    }; 

} 

Si sta lavorando bene solo per alcuni cellulari. Voglio implementare il codice per ottenere informazioni sulla traccia musicale corrente in tutti i dispositivi Android (ad esempio, dispositivi HTC e Samsung).

C'è un modo per farlo?

+1

ho un problema con questo su ICS. Sto facendo un widget media player per ICS. Non appena lancio il mio primo widget & thr è un po 'di musica che suona in un player nativo, ottengo intenti metachanged con i dettagli corretti del brano e in pochi millisecondi, ottengo lo stato del playstate cambiato, con qualche altro nome di canzone. Qualche idea su come risolvere questo? – AndroidGuy

+0

fornire esempi per ottenere carrect che riproducono i dettagli del brano – kiran

+0

Scusa, ma non ho capito kiran, sto usando lo stesso codice sopra menzionato. Il mio onReceive viene chiamato due volte, una volta per com.android.music.metachanged e immediatamente per com.android.music.playstatechanged, ma la traccia che ottengo dai due intenti è diversa. MetaChanged dà il nome corretto, ma il cambio di Playstate dà un nome diverso. Questo succede solo per il lancio iniziale. Come faccio a bypassare il cambio Playstate per il primo avvio. – AndroidGuy

risposta

6

Questo potrebbe aiutare. Io uso questa metadati per ottenere il file audio in una delle mie applicazioni:

String scheme = mAudioUri.getScheme(); 
String title = ""; 
String artist = ""; 
if(scheme.equals("content")) { 
    String[] proj = {MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ARTIST}; 
    Cursor cursor = this.getContentResolver().query(mAudioUri, proj, null, null, null); 
    if(cursor != null && cursor.getCount() > 0) { 
     cursor.moveToFirst(); 
     if(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE) != -1) { 
      title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE)); 
      artist = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST)); 
     } 
    } 
} 

Ci sono un sacco di colonne nella classe MediaStore.Audio.Media che è possibile utilizzare per trovare quello che stai cercando credo.

+0

Il codice sopra riportato cattura i dettagli musicali di lettori musicali di terze parti o solo il lettore musicale predefinito di Android? – tamil

+0

Cattura i dettagli musicali da un file multimediale standard, penso che sia basato sui tag ID3 piuttosto che su qualunque programma stia riproducendo il file. – JMRboosties

+0

Fancy assistermi con questo? – Broak

46

controllare questo questo è quello che sono abituato nella mia app funziona bene

iF.addAction("com.android.music.metachanged"); 

    iF.addAction("com.htc.music.metachanged"); 

    iF.addAction("fm.last.android.metachanged"); 
    iF.addAction("com.sec.android.app.music.metachanged"); 
    iF.addAction("com.nullsoft.winamp.metachanged"); 
    iF.addAction("com.amazon.mp3.metachanged");  
    iF.addAction("com.miui.player.metachanged");   
    iF.addAction("com.real.IMP.metachanged"); 
    iF.addAction("com.sonyericsson.music.metachanged"); 
    iF.addAction("com.rdio.android.metachanged"); 
    iF.addAction("com.samsung.sec.android.MusicPlayer.metachanged"); 
    iF.addAction("com.andrew.apollo.metachanged"); 
+0

funziona :) grazie. Inoltre, quando ho provato con il mio "Samsung Galaxy Note5", viene chiamato "com.android.music.metachanged". – iroiroys

3

Amazon MP3 (Build 2.8.1) sembra essere anteponendo gli extra con com.amazon.mp3 così per com.amazon.mp3 .metachanged ho usato:

String artist = ""; 
    String track = ""; 
    if (action.equals("com.amazon.mp3.metachanged")) { 
     artist = intent.getStringExtra("com.amazon.mp3.artist"); 
     track = intent.getStringExtra("com.amazon.mp3.track"); 
    } else { 
     artist = intent.getStringExtra("artist"); 
     track = intent.getStringExtra("track"); 

    } 

Questo è stato utile per controllare i nomi aggiuntivi:

Set<String> extrasList = intent.getExtras().keySet(); 

    for (String str : extrasList) { 
     Log.d(TAG, str); 
    } 
+0

Incominciando a dire grazie per questo, ancora preciso fino ad oggi :) –

2
import com.example.media.R; 
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.widget.Toast; 

public class CurrentMusicTrackInfoActivity extends Activity { 

    public static final String SERVICECMD = "com.android.music.musicservicecommand"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     IntentFilter iF = new IntentFilter(); 

     iF.addAction("com.android.music.metachanged"); 
     iF.addAction("com.htc.music.metachanged"); 
     iF.addAction("fm.last.android.metachanged"); 
     iF.addAction("com.sec.android.app.music.metachanged"); 
     iF.addAction("com.nullsoft.winamp.metachanged"); 
     iF.addAction("com.amazon.mp3.metachanged");  
     iF.addAction("com.miui.player.metachanged");   
     iF.addAction("com.real.IMP.metachanged"); 
     iF.addAction("com.sonyericsson.music.metachanged"); 
     iF.addAction("com.rdio.android.metachanged"); 
     iF.addAction("com.samsung.sec.android.MusicPlayer.metachanged"); 
     iF.addAction("com.andrew.apollo.metachanged"); 

     registerReceiver(mReceiver, iF); 
    } 

    private BroadcastReceiver mReceiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      String track = intent.getStringExtra("track");   
      Toast.makeText(CurrentMusicTrackInfoActivity.this, track, Toast.LENGTH_SHORT).show(); 
     } 
    }; 

} 

C'è qualche errore sul mio dispositivo Xperia Sola ma si ferma per favore aiutatemi

+0

Se posso dare un suggerimento, qualche descrizione di ciò che fa il tuo codice potrebbe aiutare l'interrogante. –

Problemi correlati