2013-07-13 52 views
1

我有用於播放10首歌曲的10個按鈕。我想實現當我在播放時按下相同的按鈕,它應該停止。當我按另一個按鈕它應該停止前一首歌曲,播放新歌..
但我不能使用相同的代碼實現這兩個事情 我試過了 當我使用此代碼,停止贏得' t爲相同的按鈕工作,但它適用於另一首播放的新歌曲。使用播放/停止按鈕時出現錯誤

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); 
    } 
} 

現在停止會爲同一按鈕的工作。但,當我按下另一個按鈕,而玩。它不會啓動新的歌曲

+1

究竟是什麼問題:1)找出哪首歌正在播放或2)暫停正在播放的歌曲? –

+0

**現在播放/暫停將工作gud。但是當我按下按鈕,同時播放。它不會start.it停止以前的歌曲.. **抱歉,但沒有得到這個? – NetStarter

+0

@NetStarter當我在播放時按下另一個按鈕時,它應該停止播放當前歌曲並播放該歌曲的新歌曲。但它會停止當前歌曲。不播放新歌曲... – Asthme

回答

0

檢查媒體播放只是停止播放請求的媒體。無需else

if(mp.isPlaying()) 
     mp.stop(); 
mp.reset(); 
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength()); 
mp.prepare(); 
mp.start(); 
afd.close(); 
0

我想問題是沒有等待onPrepared偵聽器調用start。錯誤(-38,0)是無效操作,所以當它甚至沒有完成準備時,大多數情況下可能是調用開始。