2010-09-06 3 views
3

Je suis le développeur d'une application Soundboard. Beaucoup d'utilisateurs m'ont rapporté que dans leurs téléphones certains sons ont été coupés très tôt. J'ai un Nexus One et un HTC Tattoo et tout fonctionne bien, je n'ai jamais remarqué la coupure dans mes téléphones.Sons coupés au début sur certains téléphones

Ceci est mon code pour la partie audio:

D'abord, j'ai un objet MediaPlayer dans ma classe principale:

private MediaPlayer mp = null; 

Et quand je Puss un bouton, c'est le code:

private OnClickListener onClickSound = new OnClickListener() { 

    public void onClick(View v) { 
     if(mp != null){ 
      mp.stop(); 
      mp.release(); 
      mp = null; 
     } 

     mp = MediaPlayer.create(getBaseContext(), mp3id)); 
     mp.start(); 
     mp.setOnCompletionListener(completionListener); 
    } 
}; 

Et voici le completionListener:

MediaPlayer.OnCompletionListener completionListener = new MediaPlayer.OnCompletionListener(){ 

    public void onCompletion(MediaPlayer mediaP) { 
     if(mp != null && !mp.isPlaying()){ 
      mp.stop(); 
      mp.release(); 
      mp = null; 
     } 
    } 

}; 

Vous avez la moindre idée?

Salutations

+0

Vous pouvez essayer d'affiner le problème en découvrant sur quels modèles de téléphone/versions de système d'exploitation ce problème se produit. – adamk

Répondre

2

Vous commencez à jouer avant le chargement du lecteur tous les médias. Utilisez setOnPreparedListener pour démarrer seulement après que le joueur est prêt.

+0

Cela ne fonctionne pas :( – YaW

+0

Pouvez-vous mettre à jour la question avec le code setOnPreparedListener qui ne fonctionne pas? –

+0

L'état des documents que 'create' est synchronisé, de sorte que le joueur devrait être prêt à' play() 'juste après, par contraste à utiliser 'new'. – Jonny

Questions connexes