我正在计划为Android 2.1做一个应用程序,它使用音频设备atm每分钟改变歌曲(通过我希望在Android中存在,“下一步”)。
因此,如果我已经在后台运行Spotify,播放音乐,我可以通过我的程序更改到下一首曲目吗?
如果我不清楚任何事情,请告诉我。 提前谢谢!
答案 0 :(得分:19)
我知道这是一个有点老问题,但我花了一些时间搜索其他内容然后在这里提到的内容。
有一种解决方法 - 广播媒体按钮操作。有一个接收器 - 接收器可以识别广播是来自系统还是来自另一个应用程序,因此他们可以忽略非系统广播。
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);
}
答案 1 :(得分:1)
音乐应用程序没有通用音频传输API,因此您需要查看您所定位的音乐应用程序是否公开公开服务绑定或意图。如果没有,你将无法做到这一点。
答案 2 :(得分:1)
刚刚发布了相关答案here
使用AudioManager的dispatchMediaKeyEvent()方法和定义的KeyEvent,使用最新的SDK为我工作。
答案 3 :(得分: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);
但看起来这可能需要一些hackery才能在音乐应用程序本身中实现外部包,因为MediaPlaybackService只接受显式Intent并且无法从外部访问。 This thread似乎表明它有可能带有一些hackery。
但即便如此,正如罗马所说,并非所有音乐播放器都会尊重这种意图。您必须自己检查Spotify / Pandora / Last.fm,看看他们是否有任何可用的绑定意图。
答案 4 :(得分:0)
看起来可以使用AudioManager插入媒体密钥。
这是another问题的摘录
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