programacion - manual de android en pdf
Seguir la información de la música que se está reproduciendo actualmente (3)
Estoy implementando una aplicación relacionada con la obtención de información actual de la pista de música.
Estoy usando el siguiente código para obtener 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();
}
};
}
Funciona bien solo para algunos móviles. 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 forma de hacer esto?
Amazon MP3 (Build 2.8.1) parece estar prefijando los extras con com.amazon.mp3 así que para com.amazon.mp3.metachanged utilicé:
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 fue útil para verificar los nombres adicionales:
Set<String> extrasList = intent.getExtras().keySet();
for (String str : extrasList) {
Log.d(TAG, str);
}
Comprueba que esto sea lo que utilizo en mi aplicación funcionando 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");
Esto podría ayudar. Lo uso 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 muchas columnas en la clase MediaStore.Audio.Media que puede usar para encontrar lo que está buscando, creo.