MediaPlayer onCompletion n'est pas appelé avec précision

Dans mon application, j'ai créé un lecteur audio (uniquement des fichiers WAV) à l'aide de l'API MediaPlayer . Mais le joueur ne donne pas de rappel à OnCompletion Listener chaque fois. Parfois, il donne un rappel mais pas toutes les fois. Je fais du traitement audio sur le fichier wav, comme l'insertion et l'écrasement.

Est-ce parce que tout manquant dans l'en-tête audio? Pourquoi cela ne donne-t-il pas de rappel lorsque la lecture est terminée?

  • Comparer wav de voix dans l'API Android ou Android (commandes vocales)
  • Reverse le fichier audio dans Android
  • Encode wav à AAC sur Android
  • Comment coder un WAV vers un mp3 sur un appareil Android
  • Comment convertir le fichier WAV / OGG en fichier FLAC dans Android?
  • Création d'un fichier WAV à partir de données PCM brutes en utilisant le SDK Android
  • Android Streaming Wav Audio Error: MediaPlayer Préparation échouée: status = 0x1
  • Utilisation de AudioTrack dans Android pour lire un fichier WAV
  • 6 Solutions collect form web for “MediaPlayer onCompletion n'est pas appelé avec précision”

    Assurez-vous que les en-têtes du fichier sont correctement configurés. Si quelque chose dans l'en-tête manque de callback l' onCompletion peut ne pas se produire.

    Si Mediaplayer joue un fichier .wav , la recherche peut se produire correctement, mais une secousse sera là. Donc, lorsque la lecture est terminée, il y aura une différence de 0 à 1000 ms entre la durée totale du fichier et l' onCompletion respectivement. Donc, si une telle situation arrive, vous devriez deviner cela comme surColmpletion et faire ce que vous vouliez. C'est un moyen assez difficile d'obtenir le onCompletion .

    J'ai rencontré le même problème lors de la lecture d'un fichier .wav avec le mediaplayer. Ce n'est pas un bon moyen de résoudre ce problème, mais j'ai abordé le même problème comme celui-ci lorsque j'avais la même situation. J'espère que cela vous aidera aussi à certains égards.

    Vous utilisez la méthode correcte, mais avez-vous passé n'importe quel code dans la section "// faire certaines tâches ici lorsque la lecture est terminée" AREA .

    Sinon, le rappel n'aura aucun sens.

     mMediaPlayer.setOnCompletionListener(new OnCompletionListener() { public void onCompletion(MediaPlayer mp) { Toast.makeText(getApplicationContext(),"Playback Completes", Toast.LENGTH_SHORT).show(); } }); 

    Cette méthode affichera un Toast à la fin de la lecture.

    Il semble que vous devez appeler setOnCompletionListener APRÈS début d'appel (). Regardez ici: https://stackoverflow.com/a/19555480/1860130

    J'ai travaillé pour moi.

    Pour obtenir la fonction onCompletion (), vous devez désactiver la mise en boucle avec un appel mediaPlayer.setLooping (false);

    Assurez-vous que MediaPlayer n'est pas une variable locale (temporelle). Étant donné que la variable locale sera collectée par GC. Dans ce cas, l'onCompletion n'aura aucune chance d'être invoqué.

    Essayez d'utiliser une méthode de sommeil une fois l'enregistrement terminé. Utilisez également; .prepare () avant le repli, pour éviter les collisions.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.