阅读有关 Spotify 的 Android 媒体通知 API 的文档后,https://beta.developer.spotify.com/documentation/android-sdk/guides/android-media-notifications/ ,我成功地接收了通知元数据,并且它正确显示在我的应用程序上。
但是,通知元数据仅在队列更改、轨道更改以及播放更改时更新,因此除非发生这三个操作之一,否则不会发送“positionInMs” Intent 额外内容。
作为现在的解决方法,我只是使用发送 Intent 的时间、最后已知的播放位置和跟踪当前播放位置的跟踪持续时间来启动计时器。
一开始这似乎有效,但经过进一步测试,我意识到,如果用户正在收听的轨道由于互联网连接速度慢而卡住,我设置的计时器可能会不同步。
有什么想法可以在考虑互联网连接速度慢的情况下正确跟踪播放位置吗?或者我应该考虑其他替代方案吗?
最佳答案
我知道这个问题相当老了,但如果其他人遇到这个问题,我无论如何都会回答。
我建议不断查询 Spotify 以获取播放位置。实现此目的的一种方法是使用计时器并在每个给定的时间范围内查询 Spotify。下面的示例每 100 毫秒查询一次 Spotify。如果您想减少/增加查询次数,您只需使用 stopwatch.setClockDelay() 并提供您所需的时间
例如,您可以使用这个计时器库
implementation 'com.yashovardhan99.timeit:timeit:1.2.0'
然后使用以下代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.spotify);
Stopwatch stopwatch = new Stopwatch();
stopwatch.setOnTickListener(this);
stopwatch.start();
}
@Override
public void onTick(Stopwatch stopwatch) {
Data.getAndroidSpotifyAppRemote().getPlayerApi().getPlayerState().setResultCallback(new CallResult.ResultCallback<PlayerState>() {
@Override
public void onResult(PlayerState playerState) {
Log.d("TAG", playerState.playbackPosition);
}
});
}
不要忘记在类的顶部添加以下代码:
implements Stopwatch.OnTickListener
关于android - 如何正确跟踪播放位置? [Android 媒体广播通知 Spotify API],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50180108/