Blackberry не может остановить звук, когда setLoopCount (-1); - PullRequest
1 голос
/ 18 ноября 2011

У меня есть следующий код:

InputStream stream = (InputStream)this.getClass().getResourceAsStream("/preview.mp3");
            Player p = Manager.createPlayer(stream, "audio/mpeg");
            p.realize();
            p.prefetch();
            p.setLoopCount(-1);
            VolumeControl volume = (VolumeControl) p.getControl("VolumeControl");
            volume.setLevel(1);
            p.start();

Тогда, когда я вызываю stopAlarm ()

// Stop playing music
    void stopAlarm()
    {
        try
        {
            // Tell player to stop playing
            p.stop();

        }
        catch (Exception e)
        {
            Dialog.alert("Error stopping music");
        }

        // Then release the data and close out the player
        p.deallocate();
        p.close();
    }

Короче говоря, это не останавливает звук.

Я был бы очень признателен, если бы кто-то мог помочь мне в этом.

Ответы [ 3 ]

1 голос
/ 19 ноября 2011

первая проверка объекта игрока 'p' равна нулю или нет перед остановкой игрока.

как

if(p != null)
{
    p.stop();
}
else
{
  Dialog.alert("p is null"); //to identify player is null or not.
}

если объект проигрывателя имеет значение null, то я предполагаю, что вы создаете объект проигрывателя как локальный.

, поэтому создайте объект игрока как

p = Manager.createPlayer(stream, "audio/mpeg");

и определите переменную игрока уровня класса.

1 голос
/ 21 ноября 2011

Благодаря Vivek, я заметил очень маленькую ошибку, которая помешала этому работать.Как всегда, это было чрезвычайно просто.

Хотя Player был определен как переменная уровня класса:

static Player p;

проблема, конечно, была следующей, вызывая конфликт:

Player p = Manager.createPlayer(stream, "audio/mpeg");

Итак, теперь код:

InputStream stream = (InputStream)this.getClass().getResourceAsStream("/preview.mp3");
p = Manager.createPlayer(stream, "audio/mpeg");
p.realize();
p.prefetch();
p.setLoopCount(-1);
VolumeControl volume = (VolumeControl) p.getControl("VolumeControl");
volume.setLevel(1);
p.start();

Конечно, чтобы остановить это, я просто использовал:

p.stop();
p.close();
1 голос
/ 18 ноября 2011

Попробуйте это

// Stop playing music
void stopAlarm() {
    try {
        p.stop();
        Thread.sleep(50);
        p.close();
        Thread.sleep(50);
        p.deallocate();
    } catch (Exception e) {
        Dialog.alert("Error stopping music");
    }
}
...