android.media.audiofx.Visualizer выдает исключение через раз - PullRequest
7 голосов
/ 10 февраля 2012

Я делаю живые обои для Android 2.3.3, и в них используется класс Visualizer.У меня уже есть рабочая версия моей программы Visualizer, работающая как отдельная программа, но когда я помещаю код в сервис Live Wallpaper, у меня начинается проблема.В следующем коде существует ошибка:

// Called in my Engine extension's constructor
public void setupVisualizer()
{
    mBytes = null;
    mVisualizer = new Visualizer(0);

    // EDIT
    mVisualizer.setEnabled(false); // This fixes the issue
    // END EDIT

    mVisualizer.setCaptureSize(
        Visualizer.getCaptureSizeRange()[1]); // IllegalStateException Thrown

    mVisualizer.setDataCaptureListener() {
        public void onWaveFormDataCapture(Visualizer visualizer,
            byte[] bytes, int samplingRate) {
                updateVisualizer(bytes);
            }
        public void onFftDataCapture(Visualizer visualizer,
            bytes[] bytes, int samplingRate) {}
        }, Visualizer.getMaxCaptureRate() / 2, true, false);

    mVisualizer.setEnabled(true);
}

Вот странная часть: когда я просматриваю список живых обоев, я нажимаю на него, чтобы просмотреть предварительный просмотр, и он работает нормально.Не устанавливая его в качестве активных обоев, я нажимаю кнопку «Назад», а затем снова выбираю его, и он вылетает.Я могу повторить этот процесс, и он только падает через раз и работает в другое время.Если я выберу его в качестве активных обоев, он каждый раз будет зависать.

1 Ответ

23 голосов
/ 14 февраля 2012

Глядя на источник , кажется, что IllegalStateException выбрасывается, если состояние не STATE_INITIALIZED.

Поскольку конструктор устанавливает состояние на STATE_ENABLED или STATE_INITIALIZED, это означает, что состояние, когда вы получаете исключение, равно STATE_ENABLED (единственный вариант).

В документации setCaptureSize() они упоминают, что вы не должны вызывать этот метод, пока состояние STATE_ENABLED, поэтому я думаю, что вам нужно вызвать setEnabled(false) для объекта Visualizer перед вызовом setCaptureSize()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...