3

我计划为使用音频设备 atm 的应用程序做一个适用于 Android 2.1 的应用程序,该应用程序每分钟都会更改歌曲(通过我希望 Android 中存在的“下一个”)。

因此,如果我已经在后台运行Spotify,播放音乐,我可以通过我的程序切换到下一首曲目吗?

如果我不清楚任何事情,请告诉我。提前致谢!

4

5 回答 5

20

我知道这是一个有点老的问题,但我花了一些时间搜索除此处提到的内容之外的其他内容。

有一种解决方法 - 广播媒体按钮操作。有一个问题 - 接收者可以识别广播是来自系统还是来自另一个应用程序,因此他们可以忽略非系统广播。

Intent i = new Intent(Intent.ACTION_MEDIA_BUTTON);
synchronized (this) {
            i.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_NEXT));
            sendOrderedBroadcast(i, null);

            i.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_NEXT));
            sendOrderedBroadcast(i, null);
 }
于 2012-01-08T22:39:05.620 回答
1

音乐应用程序没有通用音频传输 API,因此您需要查看您的目标音乐应用程序是否公开公开服务绑定或意图。如果没有,您将无法执行此操作。

于 2010-04-17T18:16:49.123 回答
1

刚刚在这里发布了相关答案

使用带有定义的 KeyEvent 的 AudioManager 的 dispatchMediaKeyEvent() 方法对我使用最新的 SDK 有效。

于 2017-08-07T23:52:15.417 回答
0

系统音乐主屏幕小部件向内置音乐播放器发送此意图:

    final ComponentName serviceName = new ComponentName(context, 
        MediaPlaybackService.class);
    intent = new Intent(MediaPlaybackService.NEXT_ACTION);
    intent.setComponent(serviceName);
    pendingIntent = PendingIntent.getService(context,
            0 /* no requestCode */, intent, 0 /* no flags */);
    views.setOnClickPendingIntent(R.id.control_next, pendingIntent);

但看起来这可能需要一些技巧才能在音乐应用程序本身中实现外部包,因为 MediaPlaybackService 只接受显式 Intent 并且无法从外部访问。不过,这个线程似乎表明它可能有点骇人听闻。

但即便如此,正如 Roman 所说,并不是每个音乐播放器都会尊重这个 Intent。您必须自己检查 Spotify/Pandora/Last.fm,看看他们是否有任何可用的意图来进行这样的绑定。

于 2010-04-17T19:21:18.973 回答
0

看起来可以使用 AudioManager 注入媒体密钥。

这是另一个问题的片段

this.mAudioManager = (AudioManager) this.context.getSystemService(Context.AUDIO_SERVICE);

long eventtime = SystemClock.uptimeMillis();

KeyEvent downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_NEXT, 0);
mAudioManager.dispatchMediaKeyEvent(downEvent);

KeyEvent upEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_NEXT, 0);
mAudioManager.dispatchMediaKeyEvent(upEvent);

与您可以注入 PlayPause 按钮​​和其他一些按钮的方式相同。我已经在控制 Youtube 的后台服务中对其进行了测试,它适用于 Android 6

于 2019-05-06T16:30:22.080 回答