The Android TV signage app: what your screen does at 6am with nobody in the room
The browser tab gets a board onto the TV. It cannot bring it back after a power cut, retry a failed load, or put a menu on the remote when the board is blank. Here is what a native Android TV app adds, what it deliberately does not do, and why the honest answer today is still play.channelos.tv.
The power went at 5.40 in the morning and came back at 6.10. At seven you lift the shutter, look up at the TV on the wall, and it is sitting on the launcher: a grid of app tiles and a half loaded film poster. Somebody has to find the remote, back out of three menus and type an address before the first customer is through the door.
That is not a signage problem. That is a six in the morning problem, and it is the only reason a native app exists on top of a web player that already worked.
Getting a board onto the glass is the easy half: a browser tab, about two minutes, and how to turn the TV you already own into a sign covers it end to end. This post is about the other twenty three hours. The power came back. The router rebooted. The page fell over. Somebody pressed a button on the remote and nobody knows which one.
What actually runs the screen today?
The browser your TV already has. Open play.channelos.tv on an Android TV or Google TV set, a six character code appears, you scan it with your phone and the screen is yours. Nothing to install, nothing to sideload, and no separate charge for the app.
The app is called tv.channelos.player and it is in closed testing. Its Play Store page does not resolve today, so there is no link to give you and we will not point you at a 404.
What there is, if you want it now, is the release build itself: channelos-tv-1.0.2.apk, 169 KB, smaller than most of the photographs it will put on your wall. Sideloading it onto a TV is a job in itself and we are not going to pretend otherwise: you need developer options on, a file manager or adb, and the willingness to install something your TV will warn you about. If that sentence did not sound like a normal evening, wait for the store listing and use the browser today.
So read what follows as the shape of the thing, not a button you can press this afternoon. The app is a shell around the same player, and the board is identical either way.
What does the app do that a browser tab cannot?
Five things, and every one of them is about the screen being alone in the room.
| What it adds | What it actually does | The catch, stated plainly |
|---|---|---|
| Start when the TV powers on | Listens for the boot broadcast, including the fast boot variants some manufacturers use, and opens the board. On by default. | Best effort. Android restricts apps that start themselves and TV makers enforce that differently. We cannot tell you in advance which yours is. Kiosk mode is the one that always holds. |
| Keep the screen awake | Holds the display on so a screensaver or ambient mode does not take the wall at four on a Saturday. On by default. | It holds the display, not the television. A set that powers itself down on its own timer still powers down. |
| Retry a failed load on its own | Backs off and tries again at 5 seconds, then 10, 20, 40, then every 60. Resets to 5 on success, and reloads the instant the network returns. | It is retrying a load. It is not playing from storage. |
| Survive a renderer crash | If the page’s rendering process dies, the app does not die with it. It throws the broken view away, builds a new one and reloads after five seconds. | It rebuilds the page, not the board’s place in the schedule. The screen restarts from whatever is airing now, not from where it left off. |
| A menu on the remote | Opens over the board on BACK, MENU, INFO, or a held OK. | The one that justifies the whole app. Covered below. |
The failure screen is native too, drawn in code with no HTML in it, which is the point: every case it covers is a case where HTML is what broke. Five states, each saying which one you are in, from “Starting your screen” to “No internet on this TV” to “Could not load the player” with the raw reason kept on screen. Only a main frame failure ever reaches it, so a 404 on one slide photo cannot blank the wall.
Does kiosk mode really take over the TV?
No, and how it actually works matters, because the wrong mental model here is the difference between a working screen and a support call.
The toggle in the remote menu makes the app eligible to be the TV’s home app. It does not then seize the set. It hands you to the TV’s own home app picker, where you choose ChannelOS yourself, in the television’s interface, the way you would choose any launcher. After that the set opens the board on its own, because the system launches its home app. That is why this is the mechanism that holds when boot start does not.
The same toggle reverses it. There is no lock task mode, no screen pinning, no device owner enrolment, no provisioning QR code. Nothing here can hold a television against its owner, and the TV’s own picker always wins. The whole app asks for three permissions: internet, network state, and permission to start after a reboot. No location, no camera, no microphone, no storage.
What can I fix from the counter with just the remote?
This is the part a bookmark cannot do, and it is the reason the app exists at all.
The menu is dispatched by the app, not by the page. That sounds like an implementation detail until the morning the board is blank, because a menu built in the web page is gone exactly when the web page is what failed. This one opens over a blank screen, a frozen screen and an error screen, and there is a test that launches it against a dead server and asserts it still comes up.
Press BACK, MENU or INFO, or hold OK for about three quarters of a second. A short press of OK belongs to the page and does nothing here, on purpose.
| Menu row | What it does |
|---|---|
| Screen info | 16 rows: pair code, paired name, what is playing, player address, network, IP, app and WebView versions, board layout, Android, device, uptime, last error. Its subtitle is “Read this out if you call for help”, which is exactly its job |
| Reload the board | Closes the menu and loads the player again |
| Clear cache and reload | Drops the HTTP cache, history and form data, and keeps the pairing |
| Re-pair this screen | Confirmed first. Wipes local storage, cookies and cache, then reloads, so the screen comes back with a fresh code |
| Remove from ChannelOS | Confirmed first. Takes the screen off your account from the TV itself, and greys itself out with “Nothing to remove, this screen is not paired” when there is nothing to remove |
| Network and Wi-Fi settings | Opens the television’s own Wi-Fi screen |
| Update the TV’s browser engine | Appears only when the engine looks too old, and opens the store page for it |
| App settings | Start on boot, kiosk mode, keep awake, follow the volume set in ChannelOS (off by default, one poll a minute when on), the player address (resettable, never typed), restart the app, exit the app |
| Close this menu | Back to the board |
BACK never drops out of the app
Press it six times on a paired screen and you are still on the board. Inside a sub pane BACK goes up one level, and from the top it closes the menu. Exit is an explicit menu item with a confirmation, never a key press, because the one thing a wall mounted screen must not do is fall out to a launcher when a customer’s toddler gets hold of the remote.
Will it run on the old box in the cupboard?
Probably, and the age of the box is rarely what decides it. The app needs Android 8.0 or later, and it is under 200 KB, so the processor is almost never the problem.
What decides it is the browser engine inside, not the badge on the case. Boards are sized in units an engine older than Chromium 105 does not understand, and the failure is silent: the page loads and paints, and every size collapses to sixteen pixel text with the corners squared off. Measured on a box running WebView 91, a heading that should have been 48 pixels computed to 22.
That is fixed on our side rather than yours. The deployed player measures the board and writes the sizes in pixels when the engine cannot, which is why a Chromium 91 box rendered correctly when we last checked it. The app is stricter than the player: it still counts anything below Chromium 105 as old, so on such a set Screen info reads the version with a note that it wants 105 or newer, and the menu keeps offering the browser engine update even while the board looks right. If the app ever does decide an engine cannot size a board, it says so on screen, names the version, and gets out of the way after 12 seconds.
If the engine on your box genuinely cannot render a page and cannot be updated, replacing the box is the fix rather than more configuration. That is a hardware decision, and when a dedicated player is worth buying is the honest version of it.
Who should not bother with the app
Four groups, honestly.
If the screen only runs during shop hours and you are happy to press one button. The app is for screens nobody wants to walk over to. If yours is behind the counter and you switch it on with the lights, the browser route is the whole product and the app adds nothing you will notice.
If the board has to survive a dead internet line for hours. Nothing is stored for offline playback here, and there is no cached copy of tomorrow’s board on the television. A screen with a dead router shows a message and keeps retrying, which is honest and is not the same as playing. If a site’s network is genuinely unreliable, buy a player box with local storage and let it do the job it was built for.
If you want to try it on a phone or a tablet today. You cannot, because the app is not distributed yet. Open play.channelos.tv on the tablet instead and pair it like any other screen. That is the fastest way to see a real board before anything goes on a wall.
If you are on Fire TV and you want the app specifically. The browser route works there today, the same as any other set, and that is what the rest of this site means when it lists Fire TV. The app is the part we have reasoned about and not tested: those remotes have no MENU key, which would leave BACK and a held OK as the only ways into the menu, and that is an assumption we have not put in front of a real device.
One more thing worth knowing before a screen goes into a room where private conversations happen: the native app carries no analytics of its own, but the player page it loads runs the same product analytics the rest of our site does. PostHog is the provider, it is named in our privacy policy, and the safe assumption is that whatever is on the board is captured. Keep anything confidential off the screen.
What the app changes about the price
Nothing. There is no in app purchase, and the app is not a separate product you buy. The first screen is free. After that it is 499 rupees per screen per month, or 399 per screen per month paid yearly, which is 4,788 a year per screen. See pricing. A screen running the browser and a screen running the app are the same screen on the same plan.
Do the five minute version tonight
You do not need a store listing to find out whether this works on your wall. Open play.channelos.tv on the TV, scan the code with your phone, put a real board up, then cut the power at the socket. What happens next is the honest test of every promise on this page, and it costs nothing to run.
If it comes back the way you need it to, give the wall a schedule: one channel can drive every screen you own, and a takeover puts one message over all of them from your phone when the 6am trainer calls in sick.
Get a screen live, free and decide against your own TV, not against ours.
Your screen is two minutes away.
Open the player on a TV, scan the code, publish a show. Your first screen is free.