android - 如何检查是否正在从哪个音乐应用程序播放音乐?

标签 android android-intent android-activity android-music-player

我如何检查在 Android 设备上播放的音乐来自哪个音乐应用程序?

使用 AudioManager,我们可以检查音乐是否正在播放。但它不提供播放它的音乐应用程序的详细信息。

AudioManager am = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);

am.isMusicActive() 如果在设备中播放音乐,则返回 true。但我想要播放它的音乐应用名称。

引用资料:

How do you check if music is playing by using a broadcast receiver?

Android development : To find out which app is playing music currently

例如,如果我从 Google 音乐播放器播放音乐。然后我必须能够将音乐应用程序名称设置为“Google Music Player”。

如有任何回复,我们将不胜感激。谢谢!

最佳答案

试试这个来获取当前播放轨道的文件路径:

public Cursor query(Context context, Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder, int limit) {
    try {
        ContentResolver resolver = context.getContentResolver();
        if (resolver == null) return null;
        if (limit > 0) uri = uri.buildUpon().appendQueryParameter("limit", "" + limit).build();
        return resolver.query(uri, projection, selection, selectionArgs, sortOrder);
    } catch (UnsupportedOperationException ex) { return null; }
}
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String path = intent.getStringExtra("track").replaceAll("'","''");
        Cursor c = query(context, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                new String[] { MediaStore.Audio.Media.DATA }, MediaStore.Audio.Media.TITLE + "='" + path + "'",
                null, null, 0);
        try {
            if (c == null || c.getCount() == 0) return;
            int size = c.getCount();
            if (size != 1) return;
            c.moveToNext();

            // Here's the song path
            String songPath = c.getString(0);
            Log.d("ROAST_APP", "" + songPath);
        } finally {
            if (c != null) c.close();
        }
    }
};

@Override
protected 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.android.music.playstatechanged");
    iF.addAction("com.android.music.playbackcomplete");
    iF.addAction("com.android.music.queuechanged");
    registerReceiver(mReceiver, iF);
}

来源:
Track info of currently playing music
Needletagger

关于android - 如何检查是否正在从哪个音乐应用程序播放音乐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29794257/

相关文章:

android - Android上Service和Activity的通信

java - com.google.gson.JsonSyntaxException 试图解析 json 中的日期/时间

android - 如何使用 Intent 在 Facebook 上分享文本和图像

android - 设备未从新的 Google Cloud Messaging (NEW GCM) 接收消息

android - 在 Activity 之间传递包含 Map 的 parcelable 对象

Android Activity 返回导航递归循环问题

Android:循环更改textview

java - getIntent() 总是返回 null

java - gradle 同步时出错

android - 如何确定我们来自哪个 Activity ?