Не разрешено запускать сервис - PullRequest
0 голосов
/ 25 июня 2018

Я работаю над потоковым приложением, которое также имеет интеграцию с Chromecast.Согласно моей консоли Crashlytics, значительное количество пользователей испытывают следующий сбой:

Fatal Exception: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.google.android.gms.cast.framework.action.UPDATE_NOTIFICATION pkg=com.package.name cmp=com.package.name/com.google.android.gms.cast.framework.media.MediaNotificationService (has extras) }: app is in background uid UidRecord{4ee441 u0a213 CAC  bg:+11m25s10ms idle procs:1 seq(0,0,0)}
       at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1538)
       at android.app.ContextImpl.startService(ContextImpl.java:1484)
       at android.content.ContextWrapper.startService(ContextWrapper.java:663)
       at com.google.android.gms.internal.cast.zzai.zzg(Unknown Source:269)
       at com.google.android.gms.internal.cast.zzai.onStatusUpdated(Unknown Source:1)
       at com.google.android.gms.cast.framework.media.zzr.onStatusUpdated(Unknown Source:30)
       at com.google.android.gms.internal.cast.zzdh.onStatusUpdated(Unknown Source:6)
       at com.google.android.gms.internal.cast.zzdh.zzn(Unknown Source:573)
       at com.google.android.gms.cast.framework.media.RemoteMediaClient.onMessageReceived(Unknown Source:2)
       at com.google.android.gms.internal.cast.zzct.run(Unknown Source:34)
       at android.os.Handler.handleCallback(Handler.java:789)
       at android.os.Handler.dispatchMessage(Handler.java:98)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6938)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
  • Я до сих пор не мог воспроизвести его, и поэтому я публикую это здесь.Кажется, что устройство Chromecast пытается уведомить мое приложение о чем-то, пока оно находится в фоновом режиме.

  • Все сбои происходят только в Oreo, и они появляются, когда приложение находится в фоновом режиме.

  • Сбоев не было несколько сборок назад, и я некоторое время не менял код Chromecast, поэтому я чувствую, что причиной этого является обновление некоторых зависимостей в моей сборкеФайл .gradle.

  • Существует несколько групп сбоев с одинаковой причиной и трассировкой стека, но у каждой группы есть свой UidRecord.

  • Я читал о Пределах выполнения фона в Oreo , но, похоже, это не в моих руках, поскольку я сам не касаюсь каких-либо услуг.

СМне нужно было настраивать внешний вид моей кнопки, вот как я интегрировал функцию Chromecast:

<android.support.v7.app.MediaRouteButton
android:id="@+id/btn_cast".../>
...
CastButtonFactory.setUpMediaRouteButton(context, binding.btnCast);
binding.btnCast.setRemoteIndicatorDrawable(ContextCompat.getDrawable(context, R.drawable.ic_control_bar_cast));
...
CastContext castContext = CastContext.getSharedInstance(context);
castContext.addCastStateListener(this);
...
@Override
public void onCastStateChanged(int state) {
    switch (state) {
        case CastState.CONNECTED:
        ...
    }
}
...
CastSession currentCastSession = castContext.getSessionManager().getCurrentCastSession();
...
RemoteMediaClient remoteMediaClient = currentCastSession.getRemoteMediaClient();
...
remoteMediaClient.load(mediaInfo, mediaLoadOptions);

По сути, нажатие на кнопку открывает системное диалоговое окно, в котором вы выбираете устройство.Когда вы выбираете устройство, вызывается обратный вызов, и я отправляю данные, которые я хочу воспроизвести, используя метод load () класса RemoteMediaClient.

Мои зависимости:

implementation 'com.android.support:mediarouter-v7:27.1.1'
implementation 'com.google.android.gms:play-services-cast-framework:15.0.1'

Я уже несколько раз обновлял эти библиотеки, надеясь, что проблема исчезнет (я думаю, что проблема началась где-то с 27.0.2 и 11.8.0).

Любая идея, что может произойти, в каких условиях и какчтобы решить это?

Спасибо!

1 Ответ

0 голосов
/ 27 августа 2018

У меня та же проблема в моем приложении, использующем ту же версию платформы. Если посмотреть на заметки о выпуске Google, обновление до 16.0.1 может решить эту проблему:

Cast

Исправлено исключение IllegalStateException, которое возникает, когда время запроса на поиск истекает в RemoteMediaPlayer и RemoteMediaClient. Это регрессия, введенная в 15.0.0. Клиенты должны обновить до 16.0.1 или новее, чтобы получить исправление.

https://developers.google.com/android/guides/releases

...