2013-07-13 5 views
1

У меня есть 10 кнопок для воспроизведения 10 песен. я хочу достичь, когда я нажимаю ту же кнопку во время игры, она должна быть остановлена. когда я нажимаю другую кнопку, он должен остановить предыдущую песню и воспроизвести новую песню.
, но я не мог достичь обеих вещей, используя тот же код Я пробовал это , когда я использую этот код, the stop won ' 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); 
    } 
} 

теперь остановка будет работать на той же кнопке .Но когда я нажать другую кнопку во время воспроизведения .it обыкновение начать новую песню

+1

В чем проблема: 1) Определите, какая песня играет в данный момент или 2) Приостановите воспроизводимую в данный момент песню? –

+0

** теперь воспроизведение/пауза будут работать gud. Но когда я нажимаю кнопку во время игры. It wont start.it останавливает предыдущие песни .. ** извините, но не понял? – NetStarter

+0

@NetStarter, когда я нажимаю другую кнопку во время игры .it должен остановить текущую песню и воспроизвести новую песню для этой кнопки. Но она прекратит текущую песню. Не воспроизводит новую песню ... – 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 прослушивателя. Ошибка (-38,0) является недопустимой операцией, поэтому, по большей части, вероятно, она будет запускаться, когда она еще не закончилась.

Смежные вопросы