Можно ли использовать CastRemoteDisplayLocalService в пользовательском приемнике? - PullRequest
2 голосов
/ 06 ноября 2019

Я пытаюсь создать приложение, которое может транслировать представления Android на Chromecast, и я подумал, что нашел что-то многообещающее в CastRemoteDisplayLocalService . Я создал простое тестовое приложение, но обнаружил, что обратный вызов onCreatePresentation никогда не вызывался, когда я кастовал свое устройство. После некоторых поисков я обнаружил, что мое приложение было опубликовано не как приложение для удаленного отображения, а как пользовательский приемник приложений из консоли разработчика Google Cast.

К сожалению, когда я пытаюсь создать новое приложение из консоли, RemoteПоказать приложение не вариант. После некоторого поиска я наткнулся на этот вопрос о переполнении стека , в котором говорилось, что API удаленного отображения устарел. Существует интерфейс под названием CastRemoteDisplayApi , который помечен как устаревший, но классы, которые я пытался использовать, не помечены как таковые.

Это заставляет меня задаться вопросом, является ли CastRemoteDisplayLocalService и все другие удаленныеКлассы отображения, не помеченные как устаревшие, фактически устарели и непригодны для использования, или, если, возможно, функциональность была перенесена для работы в настраиваемом приемнике, настроив его для приема удаленных отображений.

Так выглядит соответствующий код прямо сейчас. :

MainActivity.kt

private fun startCastService() {
    val intent = Intent(this, MainActivity::class.java)
    val pendingIntent = PendingIntent.getActivity(this, 0, intent, 0)
    val notificationSettings = CastRemoteDisplayLocalService.NotificationSettings.Builder().setNotificationPendingIntent(pendingIntent).build()

    CastRemoteDisplayLocalService.startService(this, CastRemoteDisplayLocalServiceImpl::class.java, "2839EC8D", castDevice, notificationSettings, object : CastRemoteDisplayLocalService.Callbacks {
        override fun onRemoteDisplaySessionEnded(p0: CastRemoteDisplayLocalService?) {
            Log.d(TAG, "onRemoteDisplaySessionEnded")
        }

        override fun onRemoteDisplaySessionError(p0: Status?) {
            Log.d(TAG, "onRemoteDisplaySessionError")
        }

        override fun onRemoteDisplaySessionStarted(p0: CastRemoteDisplayLocalService?) {
            Log.d(TAG, "onRemoteDisplaySessionStarted")
        }

        override fun onServiceCreated(p0: CastRemoteDisplayLocalService?) {
            Log.d(TAG, "onServiceCreated")
        }
    })
}

CastRemoteDisplayLocalServiceImpl.kt

class CastRemoteDisplayLocalServiceImpl : CastRemoteDisplayLocalService() {

    val TAG = "CastRemoteDisplayLoc..."

    // This function gets called
    override fun onCreate() {
        super.onCreate()
        Log.d(TAG, "onCreate")
    }

    // This function does not get called
    override fun onCreatePresentation(p0: Display?) {
        Log.d(TAG, "onCreatePresentation")
    }

    override fun onDismissPresentation() {
        Log.d(TAG, "onDismissPresentation")
    }
}

Если есть способ с Приемником пользовательских приложений получить обратный вызов onCreatePresentation, который бы решил эту проблему,Я с трудом нахожу это. Если CastRemoteDisplayLocalService фактически устарел, есть ли другой способ легко преобразовать представления Android в Chromecast? Спасибо!

...