Приложение Android автоматически активируется без участия пользователя (CastCompanionLibrary)
У меня есть приложение для Android, использующее CastCompanionLibrary v2.9.1
, модифицированный для использования play-services-cast:10.0.1
(просто простое изменение зависимостей gradle).
Краткая версия: приложение пытается автоматически подключиться к устройству ChromeCast без участия пользователя.
Длинная версия:
С момента обновления библиотеки CCL для использования play services 10.0.1
У меня было несколько пользователей, отметивших, что приложение автоматически подключается / преобразуется в ChromeCast без взаимодействия с пользователем.
Некоторые пользователи говорят, что они не используют приложение, затем они подключаются к WiFi, и приложение автоматически пытается выполнить каст. Другие сказали, что они используют приложение, они не нажимают кнопку ChromeCast, и приложение начинает кастинг.
-
У меня возникают проблемы с поиском возможных изменений в API ChromeCast, которые могут объяснить, что происходит. Я также не уверен, возникает ли эта проблема только для моего приложения или для многих других приложений с поддержкой ChromeCast. Наконец, я не могу воспроизвести эту проблему на моем собственном устройстве ChromeCast.
Любая помощь будет оценена.
2 ответа
Таким образом, оказывается, что есть ошибка в библиотеке поддержки Android 25.1.0, которая вызывала эту проблему.
https://code.google.com/p/google-cast-sdk/issues/detail?id=1105
Который теперь помечен как "исправлено внутри".
Также связано: https://code.google.com/p/android/issues/detail?id=232326
Я не видел и не слышал этого раньше, поэтому вот несколько советов, которые помогут вам провести дальнейшее расследование, чтобы выяснить причину. CCL имеет (липкий) сервис под названием ReconnectionService
он отвечает за попытки переподключения, когда вы теряете Wi-Fi, а затем получаете его обратно. Сценарий Wi-Fi, который вы упомянули, похож на это, поэтому я бы предложил начать с него. Чтобы восстановить соединение только тогда, когда это имеет смысл, он получает длительность воспроизводимого контента и делает такие попытки только в течение этого периода времени; т. е. если вы начинаете воспроизводить контент продолжительностью 1 час, а затем оставляете свой телефон на столе и поднимаете его через 2 часа, он замечает, что последний фильм перед сном был в течение 1 часа, поэтому он попытаться восстановить соединение (см. handleTermination()
в том же классе). Для живого потока, который не имеет четкой продолжительности контента, CCL использует значение по умолчанию 2 часа, но позволяет приложениям изменять это, вызывая VideoCastManager.setLiveStreamDuration(duration_in_seconds)
метод. Наконец, все переподключение зависит от нескольких факторов: оно сохраняет идентификатор маршрута последнего соединения вместе с идентификатором сеанса. Поэтому, если необходимо, вы можете очистить любой из них, и тогда он не будет пытаться переподключиться для этого конкретного сеанса (в случае, если вы хотите сохранить переподключение для некоторых и отключить для другого). Надеюсь, что это поможет устранить проблему.