我有 10个按钮可播放10首歌曲。我希望在播放时按下相同的按钮,它应该停止。当我按下另一个按钮时,它应该停止前一首歌曲并播放新歌曲。
但我无法使用相同的代码实现这两件事
我试过了
当我使用这段代码时,停止不适用于同一个按钮,但它适用于另一首新歌。
private void playSample(int[] res, int position)
{
AssetFileDescriptor afd = getApplicationContext().getResources().openRawResourceFd(res[position]);
try
{ if(mp.isPlaying())
{
mp.stop();
}
mp.reset();
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
mp.prepare();
mp.start();
afd.close();
}
catch (IllegalArgumentException e)
{
Log.e(TAG, "Unable to play audio queue do to exception: " + e.getMessage(), e);
}
catch (IllegalStateException e)
{
Log.e(TAG, "Unable to play audio queue do to exception: " + e.getMessage(), e);
}
catch (IOException e)
{
Log.e(TAG, "Unable to play audio queue do to exception: " + e.getMessage(), e);
}
}
所以我试过这样的
private void playSample(int[] res, int position)
{
AssetFileDescriptor afd = getApplicationContext().getResources().openRawResourceFd(res[position]);
try
{ if(mp.isPlaying())
{
mp.stop();
}else
mp.reset();
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
mp.prepare();
mp.start();
afd.close();
}
catch (IllegalArgumentException e)
{
Log.e(TAG, "Unable to play audio queue do to exception: " + e.getMessage(), e);
}
catch (IllegalStateException e)
{
Log.e(TAG, "Unable to play audio queue do to exception: " + e.getMessage(), e);
}
catch (IOException e)
{
Log.e(TAG, "Unable to play audio queue do to exception: " + e.getMessage(), e);
}
}
现在停止将适用于相同的按钮。但是当我在播放时按下另一个按钮。它不会启动新歌
答案 0 :(得分:0)
检查播放的媒体是否只是停止并播放请求的媒体。不需要else
。
if(mp.isPlaying())
mp.stop();
mp.reset();
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
mp.prepare();
mp.start();
afd.close();
答案 1 :(得分:0)
我猜问题是在没有等待onPrepared监听器的情况下调用start。错误(-38,0)是无效操作,所以当它甚至没有完成准备时,它们大多可能是调用start。