(Android)在音乐播放器上,您可以按预期更新搜索栏:
PRECISION_SEEKBAR = 100000;
((SeekBar) findViewById(R.id.seekBar2)).setMax(PRECISION_SEEKBAR);
timerSeekBarUpdate.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
final SeekBar seekBar = (SeekBar) findViewById(R.id.seekBar);
@Override
public void run() {
if (control == null || player == null) {
cancel();
return;
}
seekBar.setProgress((int) (player.getCurrentPosition() * PRECISION_SEEKBAR / player.getDuration()));
...
但是,如果焦点在搜索栏上,则会稳定地进行对讲,并且不间断地为进度提供反馈。喜欢"寻求控制25%","寻求控制25%","寻求控制25%","寻求控制26%" 34;,"寻求控制26%","寻求控制27%"
我错过了但却无法解决问题。我已将contentDescription设置为@null以外的其他内容。但是这次它不停地读取内容描述。
在Spotify客户端上,我查了一下,它将进度读作" xx%"就一次。尽管将注意力集中在搜索栏上。
当我将精度编辑为1或100时,会丢失搜索条上的精度。看起来歌曲中有一些部分。您可以通过在搜索栏上滑动来播放一个或另一个。
有没有人经历过这样的事?我无法在谷歌文档,堆栈网络或其他任何地方找到任何东西。
答案 0 :(得分:0)
我遇到了问题,发现SeekBar会在每次更新时读取百分比。
它有帮助,我只在百分比改变时更新SeekBar但仍然保持高精度(在我的情况下以毫秒为单位)。
@Override
public void updateSeekBar(final int currentPosInMillis, final int durationInMillis) {
long progressPercent = calculatePercent(currentPosInMillis, durationInMillis);
if (progressPercent != previousProgressPercent) {
seekBar.setMax(durationInMillis);
seekBar.setProgress(currentPosInMillis);
}
previousProgressPercent = progressPercent;
}
private int calculatePercent(int currentPosInMillis, int durationInMillis) {
if(durationInMillis == 0) {
return 0;
}
return (int) (((float)currentPosInMillis / durationInMillis) * 100);
}
previousProgressPercent
初始化为-1。
请注意,此解决方案与Spotify不同。
当SeekBar被选中时,Spotify会覆盖系统公布的消息
这有以下2种效果:
第2点可能是一个缺点,取决于你想要达到的目标。
答案 1 :(得分:0)
您可以覆盖sendAccessibilityEvent(),以便忽略描述更新:
@Override
public void sendAccessibilityEvent(int eventType) {
if (eventType != AccessibilityEvent.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION) {
super.sendAccessibilityEvent(eventType);
}
}
正如Altoyyr所说,这具有忽略所有描述更新的副作用,包括使用音量按钮滚动。因此,您需要添加回发送事件以进行批量按下操作:
@Override
public boolean performAccessibilityAction(int action, Bundle arguments) {
switch (action) {
case AccessibilityNodeInfo.ACTION_SCROLL_FORWARD:
case AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD: {
super.sendAccessibilityEvent(AccessibilityEvent.CONTENT_CHANGE_TYPE_CONTENT_DESCRIPTION);
}
}
return super.performAccessibilityAction(action, arguments);
}