2010-11-09 7 views
4

J'utilise la classe MediaPlayer d'Android pour commencer à jouer une chanson à partir d'un décalage. Après avoir spécifié ce décalage dans le code, je joue la chanson en espérant l'entendre à partir de cette position décalée mais je l'entends plutôt jouer depuis le début. S'il vous plaît noter le code suivant:MediaPlayer cherchePour jouer de façon incohérente des chansons depuis le début

MediaPlayer mplayer = new MediaPlayer(); 
    mplayer.reset(); 
    try { 
     // For example's sake, specify some known song path 
     mplayer.setDataSource("//media/external/audio/media/1"); 
     // call blocking prepare() 
     mplayer.prepare(); 
    } catch (Exception e) { 
    // Keep try/catch simple for example's sake 
     e.printStackTrace(); 
     return; 
    } 

    // seekTo is an asynchronous operation. Set it's complete callback to play the song once seekTo has completed 
    mplayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() { 
     @Override 
     public void onSeekComplete(MediaPlayer mp) { 
      // Start the song 30 seconds in 
      mp.start(); 
     } 
    }); 
    // Seek to 30 seconds into the song 
    mplayer.seekTo(30000); 

Cet exemple de code fonctionne sans erreurs dans l'émulateur (testé contre Android 1.6, 2.1 et 2.2); Cependant, lorsqu'il est exécuté sur certains combinés, la chanson jouera depuis le début. Je sais avec certitude que cela arrive sur mon Droid Incredible (Android 2.2). Notez également que LogCat aura toujours une sortie de la classe MediaPlayer indiquant que la position de la chanson a bien été décalée. J'ai débogué ceci pendant des heures et ai récuré des forum et n'ai toujours aucune solution. S'il vous plaît aider.

Répondre

1

Si vous ne l'avez pas trouvé par vous-même, il s'agit d'un problème de mise en mémoire tampon (issue documented here). La recherche d'une position non-tamponnée entraîne la lecture à partir du début à la place. Les solutions proposées sont found here (pas le plus élégant, mais à peu près tout ce qu'il y a à faire).

+0

Merci de votre participation. Je ne pense pas que ces problèmes soient les mêmes. Le bogue que vous avez lié à traite des médias en streaming et revendications à être corrigé dans 2.2. Le bug que je décris semble affecter uniquement les téléphones HTC (pour autant que je sache). – jdgilday

+0

Ils ont prétendu avoir fixé en 2.2, mais si vous lisez dans les commentaires, la plupart des gens ont toujours le problème. J'ai un incroyable et ai toujours ce problème. Avez-vous testé sur des téléphones non-HTC? – Cameron

+0

Sur mon HTC Evo, si je cherche une position tamponnée ou non tamponnée, il redémarre le flux depuis le début et je vois une erreur StageFright dans les logs. – HenryAdamsJr

Questions connexes