好的,我做了一个简单的广播应用程序,可以从我的大学广播电台播放音乐。我遇到的问题是,应用程序准备流所需的时间会导致播放按钮看起来没有响应。详细信息:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mp = new MediaPlayer();
initializeUI();
setSource();
preparedNotify();
prepareMP();
}
void initializeUI() {...
}
void setSource() {...
}
void prepareMP() {
mp.prepareAsync();
}
正如你所看到的,一旦调用onCreate,应用程序就会开始准备同步,但如果用户在准备之前单击播放按钮,则不会发生任何事情,从而创建糟糕的用户体验。
所以,我问题的关键是:我能对做些什么吗
a)减少准备流的时间
b)防止用户按下按钮直到准备好,同时仍保持平稳的用户体验
在这些情况下,您有一些选择。首先,我会灰显播放按钮,直到加载流。这样,如果人们点击播放而什么都没发生,他们就不会生气。(这可能是对这种情况最常见的回应。)其次,你可以考虑为你的应用程序使用一个启动屏幕。这可能会稍微惹恼用户,但根据您的需求,这可能是一个不错的解决方案。流需要一段时间才能加载:这就是互联网的工作方式,比特的移动速度很快。你可以通过提供某种进行预缓冲的顶层视图来延迟它们,然后允许用户在你的应用程序准备就绪时点击它。
您可以使用setOnPreparedListener,以便知道MediaPlayer何时准备好。如果用户在播放按钮准备好之前单击它,您可以设置某种标志,如playWhenPrepared
,您可以在侦听器中签入该标志,然后显示一些UI,如"缓冲…"对话框。如果准备好了,你就可以打球了。
您可以给播放按钮一个"按下状态",并将图像设置为从单击到PostExecute的按下状态。您还可以在此期间删除侦听器
只需使用像这样的应用程序的常用UI,我会等待用户按下按钮,然后加载带有旋转图标的流,比如。。。左上角或右上角。这不仅适用于您的目的,而且还将为用户提供一个更熟悉、更直观的界面。祝你好运-Sam