Turn your Android TV remote into a mouse.
TV Pointer puts a pointer on your TV screen: the arrow buttons move it and OK clicks. Web browsers and other apps made for touchscreens become usable from the couch.
Android TV & Google TV · Android 8.0+ · Free and open source · No ads · No tracking
Download the APK · Setup guide · Privacy policy
- Arrow buttons move the pointer; hold one down to go faster
- OK clicks; hold OK for a long press
- Push the pointer against a screen edge to scroll
- Back closes the on-screen keyboard without losing what you typed
- Only active in the apps you choose; everywhere else the remote works as normal
- One button switches the pointer off and on (Menu by default)
- Optional precise taps for elements that can't be pressed any other way
- No accounts, ads, analytics or tracking
Most Android TVs have no touchscreen, and on those Android refuses simulated taps. TV Pointer is built for that: it presses the button or link under the pointer through Android's accessibility system, and only uses real taps on devices that allow them, or through the optional precise taps.
It also stays out of the way. The pointer only appears in the apps you pick (common browsers are pre-selected), and the TV's own menus and apps keep working with the remote as usual.
- On the TV, install a downloader app from Google Play (for example Downloader by AFTVnews) and enter
eskey.tech/tvpointer.apk. Or download the APK from the latest release and copy it to the TV with a USB stick. - Open TV Pointer.
- Choose Agree and open Accessibility settings.
- Turn on TV Pointer.
- Open a web browser. The pointer appears in the middle of the screen.
TV Pointer isn't in Accessibility settings, or the service stops? See Troubleshooting.
| Button | What it does |
|---|---|
| Arrows | Move the pointer (hold to speed up) |
| OK | Click; hold for a long press |
| Arrow at a screen edge | Scroll |
| Back, with the keyboard open | Close only the keyboard |
| Menu | Switch the pointer off and on in the current app |
The pointer hides after a few seconds without use; press an arrow or OK to bring it back. In TV Pointer's settings you can choose the apps that use the pointer, change the toggle button, speed and size, and open apps that have no tile on the TV home screen, such as Firefox.
Some apps don't expose every element to Android's accessibility system, so TV Pointer can't press them; Firefox's address bar is one. Precise taps send real taps instead, through the TV's own debugging service, which never leaves the TV.
Turn on USB debugging (with network debugging) in Developer options, then turn on Precise taps in TV Pointer and choose Always allow when the TV asks. Step-by-step instructions: eskey.tech/tvpointer#precise-taps. The technical details are under How it works.
- Android TV and Google TV, Android 8.0 or later
- Tested on a TCL Android TV running Android 14
TV Pointer has no accounts, ads, analytics or telemetry. It doesn't save or send your button presses, what's on the screen or what you browse, and it never connects to the internet: its only network connection is the optional precise-taps link to the TV itself. Your settings stay on the TV and are removed when you uninstall the app.
Full policy: eskey.tech/tvpointer/privacy.
TV Pointer is an Android Accessibility Service. It filters remote key events, checks which app is in front and whether the on-screen keyboard is open, and draws the pointer in an accessibility overlay. To click, it finds the deepest element under the pointer in the accessibility tree and performs the click action of the nearest ancestor that has one. On devices that declare touch support it injects a tap gesture instead. Pushing against a screen edge passes the arrow key to the app so the app scrolls itself.
Precise taps use the TV's own ADB daemon at 127.0.0.1:5555. TV Pointer speaks the ADB protocol itself, signs in with an RSA key it generates on the TV (kept in the app's private storage), and runs input tap x y, or input swipe for a long press. The TV asks once to allow the key. The INTERNET permission is used only for this local connection.
TCL's built-in TCL Guard app can block apps from starting in the background, so Android can't restart TV Pointer after an update or reboot. Allow TV Pointer to auto-start in TCL Guard, then turn it off and on again in Accessibility settings. Over adb:
adb shell appops set tech.eskey.tvpointer AUTO_START allowOpen Settings → System (or Device Preferences) → Accessibility. If the TV hides that screen, enable TV Pointer over adb. This adds it to any services that are already on (such as TalkBack) instead of replacing them:
current=$(adb shell settings get secure enabled_accessibility_services | tr -d '\r')
case "$current" in ""|null) new=tech.eskey.tvpointer/.PointerService ;;
*) new="$current:tech.eskey.tvpointer/.PointerService" ;; esac
adb shell settings put secure enabled_accessibility_services "$new"
adb shell settings put secure accessibility_enabled 1Check that USB debugging and network debugging are on in Developer options. If you dismissed the TV's prompt, or later revoked USB debugging authorizations, turn Precise taps off and on again in TV Pointer and choose Always allow.
Java, no dependencies.
./gradlew assembleDebug # app/build/outputs/apk/debug/app-debug.apk
./gradlew assembleRelease # signed if keystore.properties exists
./gradlew bundleRelease # .aab for Google PlayRelease signing reads keystore.properties in the project root (not committed):
storeFile=release.jks
storePassword=...
keyAlias=tvpointer
keyPassword=...
The TV banner is generated with java tools/MakeBanner.java app/src/main/res/drawable-xhdpi/banner.png. Releases attach the APK as tv-pointer.apk, the file name the download links point to.
Copyright 2026 ES KEY TECH LTD. Licensed under the Apache License, Version 2.0.