【问题标题】:How to get current playing song details from MediaPlayer如何从 MediaPlayer 获取当前播放歌曲的详细信息
【发布时间】:2010-09-01 10:12:09
【问题描述】:

有什么方法可以得到MediaPlayer当前播放歌曲的详细信息?

【问题讨论】:

  • 您自己的 MediaPlayer 实例在您的应用中还是来自其他应用?

标签: android media-player


【解决方案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);
}
};
}

【讨论】:

  • 我没有任何运气注册广播接收器(使用您的代码)然后用 MediaPlayer 播放 MP3 - 没有收到广播!
  • 仅适用于 google play 音乐。如何在玩游戏时获取其他玩家的信息?
【解决方案2】:

没有documented method 用于从 MediaPlayer 实例获取当前正在播放的文件的信息,您需要让您的应用以另一种方式自行存储该信息。如果您使用服务来跟踪您的 MediaPlayer 实例(我建议这样做),那么这应该不会太难。

【讨论】:

  • 您好 Fredley,感谢您的建议。
  • 我可以看到很多显示歌曲详细信息的小部件,就像您在 developer.android.com/guide/topics/appwidgets/index.html 这个小部件中看到的那样。
  • 是的。和?音乐小部件旨在与某个播放器集成,您无法让自己的小部件轻松与其他媒体播放器集成。
  • 好的...然后我将创建一个服务来跟踪媒体播放器实例。非常感谢您的建议
【解决方案3】:

我认为您需要有自己的模型类,您可以从中设置和获取歌曲名称。有关此信息和其他信息,请参阅 Stack Overflow 问题:
How to set the PlayList Index for Mediaplayer(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;
    }
    

    【讨论】:

    • OP 问题是检索在 MediaPlayer 对象中播放的歌曲详细信息。这是一个不同的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 2012-06-01
    • 2021-06-11
    • 2020-03-16
    • 1970-01-01
    相关资源
    最近更新 更多