(Android MediaPlayer) Comment suis-je censé appeler setAudioStreamType() si MediaPlayer.créer() appelle implicitement prepare()?

Je suis en train d'écrire un Android application alarme qui utilise un Service dans le but de jouer la tonalité de l'alarme. Actuellement, je suis en mesure d'obtenir l'audio à jouer, mais il joue dans une forme qui peut être coupé en tournant le dispositif de volume. Donc, je suis en train d'ajouter un appel à setAudioStreamType(AudioManager.STREAM_ALARM); pour l'en empêcher.

J'ai le texte suivant pour mon onStartCommand() fonction pour le service:

MediaPlayer mMP;    
@Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        try
        {
            mMP = MediaPlayer.create(this, R.raw.alarm);
            mMP.setAudioStreamType(AudioManager.STREAM_ALARM);
            mMP.setLooping(true);
            //mMP.prepare(); commented out since prepare() is called in create
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        if (mMP != null) mMP.start();

        return START_STICKY;
    }

Mon problème est que, avec l'appel à setAudioStreamType(), le lecteur multimédia ne joue jamais l'audio. Si je commente cette ligne, la lecture audio.

Avec la ligne, j'obtiens l'erreur d'exécution suivant(s):

04-10 19:32:03.115: E/MediaPlayer(3411): setAudioStream appelé dans l'état 8

04-10 19:32:03.115: E/MediaPlayer(3411): erreur (-38, 0)

04-10 19:32:03.115: E/MediaPlayer(3411): démarrer appelé à l'état 0

04-10 19:32:03.115: E/MediaPlayer(3411): erreur (-38, 0)

04-10 19:32:03.115: E/MediaPlayer(3411): Erreur (-38,0)

04-10 19:32:03.115: E/MediaPlayer(3411): Erreur (-38,0)

Quelques recherches (je ne trouve pas le lien maintenant) m'a dit que setAudioStreamType() ne peut pas être appelé après prepare() a été appelé, et que create() appelle implicitement prepare().

En tout ce qui concerne, comment suis-je censé setAudioStreamType() sans une telle erreur?

OriginalL'auteur finiteloop | 2012-04-10