Applicast Widget - Sony Bravia

Dzisiaj w poradniku z cyklu "notatnik programisty" zajmę się zagadnieniem widgetów dla telewizorów, w tym konkretnym przypadku dla odbiorników Sony Bravia. Widgety w wydaniu Sony to pałętające się z boku ekranu niewielkie ramki wyświetlające przeróżne informacje, najczęściej pobierane z sieci. Napisanie we własnym zakresie takiej "zabawki" nie jest skomplikowanym procesem. Poniżej zamieszczam krótki opis jak to zrobić oraz przykładowy praktyczny projekt. Dokumentacja, api i instrukcja programisty dla telewizorów Bravia jest niestety w wielu (kluczowych) miejscach napisana po japońsku dlatego poniższy tekst powstał w efekcie mozolnych prób i błędów podczas tworzenia przykładowego widgetu. A więc po kolei.

  1. Struktura katalogu i pliki:

    • Widget - folder główny
      • bg.png - tło widgeta szerokość 280px
      • contact.xml - informacje kontaktowe
      • description.xml - opis widgeta
      • info.xml - informacje i ustawienia
      • layout.xml - opis rozmieszczenia elementów widgeta
      • preference.xml - opis strony z ustawieniami
      • widget.js - kod źródłowy

    Wszystkie te pliki są wymagane. kodowanie znaków powinno być (musi) ustawione na UTF-8 (bez BOM). Oczywiście do podstawowej struktury plików można dorzucać własne pliki według uznania.

Głównym plikiem zawierającym kod wykonywalny jest widget.js. Zawiera on szereg funkcji zdefiniowanych przez API. Oto wszystkie możliwe:

function onLoad() {
//Funkcja wywoływana przy ładowaniu widgeta do pamięci np. po zmianie ustawień , wymagana
}

function onFocus() {
//Wywoływana przy "podświetleniu" widgeta
}

function onUnfocus() {

}

function onActivate() {
//przy aktywacji (jeden widget na ekranie)
}

function onUpKey() {
//Naciśnięcie przycisku w górę na pilocie
}

function onDownKey() {
//Naciśnięcie przycisku w dół na pilocie
}

function onRightKey() {
//Naciśnięcie przycisku w prawo na pilocie
}

function onLeftKey() {
//Naciśnięcie przycisku w lewo na pilocie
}

function onConfirmKey(type) {
//Naciśnięcie zatwierdź: type = 0 naciśnięty, 1 zwolniony
}

function onBlueKey() {
//Naciśnięcie niebieskiego przycisku na pilocie
}

function onRedKey() {
//Naciśnięcie niebieskiego przycisku na pilocie
}

function onGreenKey() {
//Naciśnięcie zielonego przycisku na pilocie
}

function onYellowKey() {
//Naciśnięcie żółtego przycisku na pilocie
}

Oczywiście można by tu dużo napisać ale nie ma nic lepszego niż konkretny przykład.

Widget ten wykorzystuje zapytania AJAX do wyświetlenia na ekranie telewizora aktualnego rozkładu jazdy SKM Trójmiasto. Korzysta z wew. usługi devrise.
Aby go zainstalować należy rozpakować archiwum do jakiejś pamięci USB (najlepiej do gł. katalogu). Po włożeniu pendrive-a do gniazda USB w telewizorze należy na pilocie nacisnąć przycisk HOME, z menu Sieć przejść do urządzenia USB i wybrać nasz widget. Po zainstalowaniu trzeba ustawić stację początkową i końcową. Można to zrobić w ustawieniach Widgetu ("Options" -> Ustawienia). Po wyborze stacji i zapisaniu ustawień na ekranie będzie wyświetlane 5 najbliższych odjazdów z wybranej stacji w wybranym kierunku. Informacje odświeżają się samoczynnie.