Android ConnectSDK Отображение значка приложения с подключенного ТВ-устройства не работает. Ошибка: якорь доверия для пуAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android ConnectSDK Отображение значка приложения с подключенного ТВ-устройства не работает. Ошибка: якорь доверия для пу

Сообщение Anonymous »

Я пытаюсь управлять телевизором LG с помощью ConnectSDK в Android. Я могу подключить телевизор и управлять им из приложения. Я получаю список всех необходимых мне приложений в формате JSON из библиотеки ConnectSDK, но не могу отобразить значки. Я пытаюсь отобразить их с помощью Glide.
Ниже приведен примерный код для проверки концепции.
Вот как я подключаюсь к устройству и получаю информацию от телевизор.

Код: Выделить всё

    var myDiscoveryListener = MyDiscoveryListener(mHandler)
var myConnectableDeviceListener = MyConnectableDeviceListener(mHandler)
var mDiscoveryManager: DiscoveryManager

init {
DiscoveryManager.init(applicationContext)
mDiscoveryManager = DiscoveryManager.getInstance()
mDiscoveryManager.pairingLevel = DiscoveryManager.PairingLevel.ON
mDiscoveryManager.registerDefaultDeviceTypes()
mDiscoveryManager.capabilityFilters = mutableListOf(CapabilityFilter(Launcher.Application_List))
mDiscoveryManager.start()
mDiscoveryManager.addListener(myDiscoveryListener)
//mConnectionDriver.startDiscovery(mHandler)
}
Затем подключитесь к устройству, выбранному из списка

Код: Выделить всё

    private fun updateStartConnectingToDevice(connectedDevice) {
device.setPairingType(DeviceService.PairingType.PIN_CODE)
device.connect()
if(device.listeners != null) {
device.removeListener(myConnectableDeviceListener)
}
device.addListener(myConnectableDeviceListener)
}
Затем после подключения к устройству

Код: Выделить всё

val service = device?.services?.find { it.serviceName.toString().lowercase().contains("webos") }
val webOSService: WebOSTVService? =
device?.getServiceByName(service?.serviceName)?.getAPI(WebOSTVService::class.java)

webOSService?.getLaunchPoints(object : WebOSTVService.LaunchPointsListener {
override fun onError(error: ServiceCommandError?) {

}

override fun onSuccess(`object`: JSONArray?) {
val json = `object`?.get(0) as JSONObject
test = json.get("icon").toString()
Log.i("Sample JSONArray", json.get("icon").toString())

Log.i("Sample JSONArray", `object`.toString())

}
Загрузка изображения значка в пользовательский интерфейс

Код: Выделить всё

 GlideImage(
model = test,
contentDescription = test,
modifier = Modifier
.padding(10.dp)
.size(100.dp),
)
Каждый раз, когда я пытаюсь загрузить изображение, я получаю эту ошибку

Код: Выделить всё

java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
Я пробовал искать разные методы в документации ConnectSDK, но пока безуспешно.
Соединение с устройством хорошее. . Я могу переходить к различным выбранным приложениям, перемещать курсор выбора и отправлять сообщения. Единственная проблема — загрузка значков из списка приложений.
В этом сообщении объясняется та же проблема, с которой я столкнулся. https://github.com/ConnectSDK/Connect-S ... issues/412
В конечном итоге они заявляют, что используют тот же метод, что и я, но добавляют ссылку на значок в TrustManager. . Как бы мне это сделать?
Чего мне не хватает? Будем признательны за любые рекомендации.

Я еще немного изучил SDK и попробовал следующее:

Код: Выделить всё

    val webTrust = WebOSTVTrustManager()
val cert : X509Certificate? = webOSService?.webOSTVServiceConfig?.serverCertificate
webTrust.setExpectedCertificate(cert)
Log.i("Sample", "${webOSService?.webOSTVServiceConfig?.serverCertificate}")
Log.i("Sample", "${webTrust.lastCheckedCertificate}")
Я получаю сертификат сервера и могу прочитать его, используя первую запись журнала, указанную выше. Я получаю NULL, если читаю вторую запись, то есть после того, как я ее установил. webTrust.setExpectedCertificate(cert)
Я читаю клиентскую и серверную часть сокетов, созданных в SDK в https://github.com/ConnectSDK/Connect-S ... lient.java
При чтении методы, я вижу, что они вызывают определенные комментарии в журнале
"действительность"
"зарегистрировано"
которую я получаю в Logcat.
Сразу после подключения к устройству я вижу запись Logcat:

Ожидается сертификат устройства (любой)

Если сертификат сервера был правильно зарегистрирован, он будет показывать информацию о сертификате вместо (любого), как указано в WebOSTVTrustManager
https://github.com/ConnectSDK/Connect-S ... nager.java

Код: Выделить всё

@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
Log.d(Util.T, "Expecting device cert " + (expectedCert != null ? expectedCert.getSubjectDN() : "(any)"));

if (chain != null && chain.length > 0) {
X509Certificate cert = chain[0];

lastCheckedCert = cert;

if (expectedCert != null) {
byte [] certBytes = cert.getEncoded();
byte [] expectedCertBytes = expectedCert.getEncoded();

Log.d(Util.T, "Device presented cert " + cert.getSubjectDN());

if (!Arrays.equals(certBytes, expectedCertBytes)) {
throw new CertificateException("certificate does not match");
}
}
} else {
lastCheckedCert = null;
throw new CertificateException("no server certificate");
}
}

@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
Будем благодарны за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/793 ... working-er
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»