好的我已经制作了一个简单的广播应用程序,可以从我的大学电台播放音乐。我遇到的问题是,应用程序准备流所需的时间会导致播放按钮显示无响应。 详细说明:
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被调用,应用就会启动prepareAsync,但如果用户在准备之前单击播放按钮,则不会发生任何事情,从而造成糟糕的用户体验。
所以,问题的关键在于:我能做些什么吗
a)减少准备流的时间
b)阻止用户按下按钮直到准备好,同时仍保持平稳的用户体验
答案 0 :(得分:2)
在这些情况下,您有几个选择。首先,我将播放按钮变灰,直到加载流。这样,如果他们点击播放并且没有任何反应,人们就不会生气。 (这可能是对这种情况最常见的回应。)其次,您可以考虑为您的应用使用启动画面。这可能会略微惹恼用户,但根据您的需求,它可能是一个很好的解决方案。流需要一段时间才能加载:这就是互联网的工作方式,这些比特只能移动得那么快。你总是可以通过提供一些预先缓冲的顶级视图来延迟它们,然后允许用户在你准备就绪时点击你的应用程序。
答案 1 :(得分:1)
您可以使用setOnPreparedListener,以便了解MediaPlayer的准备时间。如果用户在准备之前单击播放按钮,您可以设置某种类型的标记,如playWhenPrepared
,您可以在该监听器中检查,然后显示一些UI,如“缓冲...”对话框。如果它准备好了那么你就可以玩了。
答案 2 :(得分:0)
您可以将播放按钮设置为“按下状态”,并将图像从单击时设置为按下状态,直到onPostExecute。您还可以在此期间删除侦听器
答案 3 :(得分:0)
对于像这样的应用程序,通常会使用常用的UI,我会等待用户按下按钮,而不是加载带有旋转图标的流,比如说......左上角或右上角。这不仅适用于您的目的,而且还可以为用户提供更熟悉和直观的界面。祝好运! -SAM