IllegalStateException в chromecast sendMessage - PullRequest
3 голосов
/ 20 апреля 2020

В консоли Play пользователи видят исключение IllegalStateException в вызове sendMessage chromecast. Согласно API:

IllegalStateException: если этот метод не вызывается в главном потоке.

Однако в моем коде я вызываю его следующим образом:

            Handler uiHandler = new Handler(Looper.getMainLooper());
            uiHandler.post(new Runnable(){
                @Override
                public void run() {
                    mCastSession.sendMessage(mMyChannel.getNamespace(), message);
                }
            });

В чем здесь проблема? Я не могу воспроизвести это сам.

1 Ответ

0 голосов
/ 28 апреля 2020

Попробуйте поместить Log.d() в тело run(), чтобы убедиться, что поток туда попал, и вы можете исключить, что ошибка в обработке метода sendMessage(). Затем:

runOnUiThread

Запускает указанное действие в потоке пользовательского интерфейса. Если текущий поток является потоком пользовательского интерфейса, то действие выполняется немедленно. Если текущий поток не является потоком пользовательского интерфейса, действие публикуется в очередь событий потока пользовательского интерфейса.

Handler() и runOnUiThread() могут выполнять операции с пользовательским интерфейсом потока, но runOnUiThread() только выполняет процесс из потока, и, кроме того, должна быть передана ссылка на действие, в котором он выполняется.

runOnUiThread(new Runnable() {
    public void run() {
        //...    
    }
});

GL

Источник

...