Ниже приведен примерный код для проверки концепции.
Вот как я подключаюсь к устройству и получаю информацию от телевизор.
Код: Выделить всё
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.Соединение с устройством хорошее. . Я могу переходить к различным выбранным приложениям, перемещать курсор выбора и отправлять сообщения. Единственная проблема — загрузка значков из списка приложений.
В этом сообщении объясняется та же проблема, с которой я столкнулся. 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}")
Я читаю клиентскую и серверную часть сокетов, созданных в 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
Мобильная версия