Есть ли способ получить информацию о текущей песне, которую играет MediaPlayer?
Как получить текущую информацию о пьесе из MediaPlayer
Ответ 1
Просто для справки, это работает:
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);
}
};
}
Ответ 2
Нет документа documented method для получения информации о текущем воспроизводимом файле из экземпляра MediaPlayer, вам нужно сделать свой магазин приложений таким сама информация по-другому. Если вы используете Сервис для отслеживания вашего экземпляра MediaPlayer (который я рекомендую), это не должно быть слишком сложно.
Ответ 3
Я думаю, вам нужно иметь свои собственные классы моделей, из которых вы можете установить и получить название своей песни. Для получения этой и другой информации см. Вопрос "Переполнение стека":
Как установить индекс PlayList для медиапланера (ExpressionMediaPlayer: Mediaplayer).
Если вы хотите знать, как это реализуется, вы можете получить source и посмотреть, как они реализованы.
Ответ 4
Я узнал, как это сделать сейчас, поэтому я не знаю, работает ли он на всех версиях Android.
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;
}