Información de la pista de la música que se está reproduciendo actualmente

Estoy implementando una aplicación relacionada con la obtención de la información actual de la pista musical.

Estoy usando el código siguiente para conseguir eso:

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(); } }; } 

Está funcionando bien para algunos móviles solamente. Quiero implementar código para obtener información actual de la pista de música en todos los dispositivos Android (por ejemplo, dispositivos HTC y Samsung).

¿Hay alguna manera de hacer esto?

Esto podría ayudar. Utilizo esto para obtener metadatos en archivos de audio en una de mis aplicaciones:

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

Hay un montón de columnas en la clase MediaStore.Audio.Media que puede utilizar para encontrar lo que estás buscando, creo.

Compruebe esto es lo que se utiliza en mi aplicación funciona bien

  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"); 

Amazon MP3 (Build 2.8.1) parece estar prefijando los extras con com.amazon.mp3 así para com.amazon.mp3.metachanged He utilizado:

  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"); } 

Esto era práctico para comprobar los nombres adicionales:

  Set<String> extrasList = intent.getExtras().keySet(); for (String str : extrasList) { Log.d(TAG, str); } 
 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(); } }; } 

¿Hay algún error que ejecutar en mi dispositivo Xperia Sola, pero se detiene por favor me ayude

  • Android MediaPlayer se está preparando demasiado tiempo
  • Reproductor de música de lanzamiento de Android con intención
  • Música de backround de Android a través de múltiples actividades; Cómo presionar el botón Inicio
  • Mostrar toda la música en la tarjeta SD
  • API de Valoración de KitKat de Android 4.4
  • ¿Cómo se enlaza música en PyGame Subset para Android?
  • Android - MediaPlayer tamaño de búfer en ICS 4.0
  • No destruir un servicio enlazado Activar destruir
  • Cómo obtener los detalles actuales de la canción de reproducción de MediaPlayer
  • Cómo reproducir o reanudar la música de otro reproductor de música de mi código?
  • Android Lollipop - controles de música de pantalla de bloqueo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.