android - 如何在Android上获取当前播放轨道的路径

标签 android streaming

<分区>

我想编写一个应用程序将当前正在播放的音乐流式传输到另一台设备。 两个设备之间的连接确实有效,我也可以通过 wifi 传输一些字符串,但我在获取当前轨道时遇到了问题。

我使用了 this blog 的代码获取当前播放轨道的一些信息,但我无法获取文件的路径。

我认为应该可以在我收到专辑、轨道或艺术家时获取路径。但我试了又试,什么也没找到。所以我问:是否有可能通过接收器获得路径?如果没有,还有其他方法可以获取当前轨道及其路径吗?

最佳答案

我为此进行了很多搜索,并且找到了很多解决方案,但它们对我不起作用。最后,我结合使用了所有现有解决方案并且有效。 您必须在您的应用中添加所有其他播放器。然后它会为您返回当前正在播放的歌曲的标题(如果您的歌曲没有标题,它将返回文件名):

intent.getStringExtra("track")

最后查询这首特定的歌曲,你可以访问关于这首歌的所有信息,当然还有它的路径。让我知道它是否适合你。这对我有用:

public class GetMusic extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.get_music);

    IntentFilter iF = new IntentFilter();
    iF.addAction("com.android.music.playstatechanged");
    iF.addAction("com.htc.music.playstatechanged");
    iF.addAction("fm.last.android.playstatechanged");
    iF.addAction("com.sec.android.app.music.playstatechanged");
    iF.addAction("com.nullsoft.winamp.playstatechanged");
    iF.addAction("com.amazon.mp3.playstatechanged");
    iF.addAction("com.miui.player.playstatechanged");
    iF.addAction("com.real.IMP.playstatechanged");
    iF.addAction("com.sonyericsson.music.playstatechanged");
    iF.addAction("com.rdio.android.playstatechanged");
    iF.addAction("com.samsung.sec.android.MusicPlayer.playstatechanged");
    iF.addAction("com.andrew.apollo.playstatechanged");
    iF.addAction("gonemad.dashclock.music.playstatechanged");
    iF.addAction("com.piratemedia.musicmod.playstatechanged");
    iF.addAction("com.tbig.playerpro.playstatechanged");
    iF.addAction("org.abrantix.rockon.rockonnggl.playstatechanged");
    iF.addAction("com.maxmpz.audioplayer.playstatechanged");
    iF.addAction("com.doubleTwist.androidPlayer.playstatechanged");
    iF.addAction("com.lge.music.playstatechanged"); 
    registerReceiver(mReceiver, iF);
  }
    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Uri mAudioUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        String selection = MediaStore.Audio.Media.TITLE + " == \"" + intent.getStringExtra("track") + "\"";
        String[] STAR = { "*" };
        Cursor cursor = getContentResolver().query(mAudioUri,STAR, selection, null, null);
        if (cursor != null && cursor.getCount() > 0) {
            cursor.moveToFirst();
            if (cursor.getColumnIndex(MediaStore.Audio.Media.TITLE) != -1) {
                String fullpath = cursor.getString(cursor
                        .getColumnIndex(MediaStore.Audio.Media.DATA));
                Toast.makeText(getApplicationContext(),"song path: " + fullpath,Toast.LENGTH_LONG).show();
            }
        }
    }
  };
}

关于android - 如何在Android上获取当前播放轨道的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14657496/

相关文章:

android - 设备无关像素的基础知识

android - 在 eglSwapBuffers 之后保留后台缓冲区内容

Android Intent 过滤器数据路径示例

java - Spark Streaming 通过多个关键 Java 减少

c# - C# 中的 Windows 应用程序?

android - 是否可以在Android Studio项目中运行宏?

android - 处理 BackHandler

ios - 同时下载和播放从多个 URL 拼凑而成的歌曲

java - 如何通过HTTP get获取音频文件?

python - 如何将 Csv 文件流式传输到 BigQuery?