Persistent "No Targets Found" for Play To on Modern Android Clients

TL;DR: Android 14/16 "Play To" Discovery Blackout

  • The Symptom: Channels target list ("Play To") is 100% empty on modern Pixel/Android hardware.
  • The Proof: Legacy Android 11 devices on the same Wi-Fi see all targets perfectly. Direct IP connection to the DVR server works fine.
  • The Root Cause: Modern Android security (Local Network Protections) silently drops mDNS/Discovery packets unless the app explicitly declares and requests the NEARBY_WIFI_DEVICES permission.
  • The Status: Because the app does not currently request this permission, the OS provides no UI toggle for the user to grant it, and ADB "force-grants" are blocked on retail (User) builds.
  • The Fix: App update required to include the modern Local Network/Nearby Devices manifest declarations and runtime permission triggers.

Full Diagnostic Summary for Developers

Issue Overview: For several OS generations (Android 14 through the current retail Android 16 cycle), the Channels Android app on flagship hardware has been unable to discover remote targets for the "Play To" feature. Despite being on the same subnet as multiple active TV targets (Google TV, Fire TV, etc.), the target list remains empty.

Diagnostic Baseline:

  • Network Health Verified: Discovery functions correctly on a legacy tablet running an older Android version (Android 11) on the same subnet. This confirms that mDNS/multicast reflection and firewall rules (UDP 5353) are functioning correctly at the router level.
  • Connectivity Verified: The modern tablet connects to the Channels DVR Server immediately via Manual IP. Standard TCP/UDP communication between the client and server is fully functional.
  • OS Restrictions: Using ADB on a standard retail build of the tablet to force-enable local network discovery flags (RESTRICT_LOCAL_NETWORK) was rejected by the system: Cannot override a change on a non-debuggable app and user build.

Technical Observations: The problem is a Manifest/Permission mismatch regarding modern Android's Local Network Protections:

  1. Missing Discovery Permissions: In the system App Info for Channels, there is no "Nearby Devices" or "Local Network" permission group available. On modern Android versions, if an app does not explicitly declare the NEARBY_WIFI_DEVICES permission in its manifest, the OS "fails closed," silently dropping mDNS/SSDP discovery packets without showing a toggle to the user.
  2. Sandboxed Discovery: While the app can communicate via direct IP (TCP), the discovery of other clients (multicast) is being suppressed by the OS networking stack. This behavior has been consistent across multiple OS updates, suggesting the app is not triggering the necessary runtime prompts or declaring the modern API keys required to "see" the local network.

Requested Action for Developers: To resolve this for users on modern Android hardware, the app requires an update to align with current OS security requirements:

  • Manifest Update: Declare android.permission.NEARBY_WIFI_DEVICES in the app manifest.
  • Runtime Permission Request: Implement logic to trigger the system-level prompt for "Local Network Access" or "Nearby Devices." Without this trigger, the OS provides no UI way for a user to grant the app the ability to scan the network.
  • Target API Alignment: Review the "Local Network Protection" protocols (introduced in Android 14/15 and finalized in 16), which require explicit user consent for inter-device communication discovery.
2 Likes

Are you talking about casting from your phone? The usual setup is to use an Android TV or Apple TV connected to your TV. Those devices run the Channels App.

There is a PlayTo option on the Android phones/tablets (mobile) Channel app that used to allow casting to all Android TV and FireTV devices. It hasn't worked in probably 3 years now.

1 Like

Channels has never ever supported casting or airplay.

What it has, is a feature that will remotely start playing content on an open version of Channels on Apple TV or Android TV.

When the app is open, the mobile client can see it on the network, and will ask if you want to play something there instead of locally on the mobile client.

Again, this is not casting.

1 Like

It’s unclear if this is what you’re trying to do or not. Your AI generated post is extremely lengthy and verbose.

Would you mind just posting what your issue actually is?

1 Like

Whatever it is, it does not work on Android phones and hasn't for at least 3 years. At one time it did work, but now it does not list a single available device. I never really had a need big need for it.

1 Like

Don't know why, but this made me chuckle. I guess because I've spent a bit of time venting my frustrations about google/android recently.

1 Like

All the DVR features I really need work just fine for me. The Channels server and apps work so much better than anything that I have ever used, even without the newer features. So I am not really complaining about this feature that doesn't work, but just reporting my experience.

Succinctly, ALL iOS and Legacy Android devices have NO PROBLEM "Play(ing) To TV" (on same subnet). NEW Android devices (e.g., Android 14/15/16), feature is BROKEN - as documented in this Forum (by others).

I finally got around to looking at this today, and did extensive network testing. These steps are Summarized by Gemini - trust me, my own write up would be far messier/less readable.

If the working assumption is correct, that your Android codebase fails to take into account changes made since Android 14 to mDNS broadcast/negotiation, then "the" solution is a somewhat straightforward change in app manifest to Request Permission for Network Discovery.

I tried using ADB to force this change but app is protected. I actually put a bit of thought into figuring out this longstanding shortcoming in your product.

Prima facie evidence presented that your Android app has a specific misconfig relative to updated Android Local Network Protection model. Take it for what its worth.

1 Like

Instead of trying to use Gemini to solve your problem, try using it to help you do a better job of describing what the problem is. Providing us with screenshots of the screen you're having problems with would also be helpful.

Gemini won't be able to actually help you solve the problem or give you the actual source of the issue — that's going to be something only we can do. The best you can do is to make the problem understandable to us, so that we can see what it is, recreate it ourselves, and look through your logs (from you sending diagnostics) that can help piece the situation together.

1 Like

Like a screenshot of "Play to Your TV" being ON ... seriously?

Either you guys know mDNS Discovery is broken on your Android app, when running under latest Android (14+)... or you don't. If you think it's not Broken - that everyone else is honky-dory - then I "must" have some weird Networking problem due to other issues.

The UI Path is User clicks Channel in Guide, then NORMALLY one gets presented a list of mDNS-discovered targets. There is NO log corresponding to THAT, as that missing aspect (of Play to menu) is result of mDNS Discovery background setup WAY, WAY, WAY upstream. But for what it's worth, the just-described sequence is logged here (with slight redaction as to LAN IP):

2025/12/31 18:50:22.940074 [TNR] Opened connection to M3U-DisqueTV for ch2016 Western TV
2025/12/31 18:50:26.141252 [SNR] Buffer statistics for [IP REDACTED] (Pixel Tablet) for ch2016 Western TV: buf=0% drop=0%
2025/12/31 18:50:26.141363 [TNR] Closed connection to M3U-DisqueTV for ch2016 Western TV

This stuff ain't going to be showing up in you Log, which just docs the Channel connection.

Let me spell it out, and then I need to time out here. Upon 10 sec glean of my Summary, you should know (1) mDNS Discovery BROKEN on recent Android OS (something you should ALREADY know), and (2) Recent Android OS changes may have caused that regression. ALL the other verbage just documents all the steps I took to test the setup, so it is optional reading - somehow "Gemini" is being overly hyped for whatever reason.

If you have any helpful events that I could trigger Log entries for, I am game. But like I said, this is an mDNS Discovery issue and as such I don't see anything log-wise that I could produce that would be relevant to THAT problem.

Guess if I get SUPER bored tomorrow, I will Wireshark your 5353 traffic and compare to your other (i.e., iOS) apps.

The diagnostic logs you send from the app look nothing like the DVR log entries.
You're not going to get much help by being argumentative with the developers.
This is a User Community Forum, not a company tech support forum.

1 Like

Other than "Submit Diagnostics" option fron Android app (which I just did), how does one gain access to App's Log? Would be nice to review that against working iOS app and working older Android (11) app, to see what differences if any are present.

As a threshold issue, would be nice to know whether the Android app's Play To Your TV is known to be broken on NEW Android releases. My own experience, and prior review of Forum posts, seem to indicate that it is. If, however, it is known to NOT be broken (on NEW Android), then I will stop right there and assume it is a user-specific problem.

the screenshot would help those of us using newer stuff that never noticed the feature going away. I vaguely remember having the option you speak of, but alas my current setup is hiding any trace of this feature.

If I understand correctly the android version of the tv/box you want to play on needs to be the older version? with an old box can a new phone play to the old box or do any android in the mix need the older version?

part of me wonders why this feature is needed. I understand it sounds like it's an awesome feature, but why not just use the phone as a bluetooth remote for the tv and use the tv's app?

edit; also is this the old paid app or the newer one that comes with a server subscription?

edit 2 . i re-read and see it's the android version of the phone/tablet you use to 'remote control' the tv.. so see edit1

You can use the Channels DVR Clients feature for Media Tools Manager (a Streaming Library Manager Extension) to easily get the logs, or you could do it manually by going to http://[IP ADDRESS OF CLIENT]:57000/log. Either way, so long as client is launched, in the foreground, and connected to the same network, you can see what is happening. However, it's just that session, so you'll want to repeat your activities and immediately view the log.

@eric, I am going to have to respectively disagree with you on this one. Back in August @tmm1 asked me to take a look into why using "intent" to launch an app on Android was working in v10, but not in v12+. Using AI, I was able to analyze Channel's manifest and parts of the codebase and compare it against other apps where this function was working. It was because of the AI that I was able to come to the same conclusions as the OP: it appears as if you guys have not added certain lines to your manifest to make sure existing features are compatible with modern versions of Android. In this case, I came to the same type of result, one line is needed:

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>

AI certainly can't resolve all issues or do all work, but it can be a useful tool in narrowing things down to a real solution. To be clear, just as the OP said, I'm not saying what has been presented is the definitive answer, but it's a best take from an outsider perspective since we don't have any ability to test changes to the apps ourselves. In other words, we're trying to be helpful and come with potential solutions, not just complaints.

Maybe for you, but that's not the case for everybody. I've used it recently on my On 4K Pro box and Onn 4K dongle, both running Android TV 14. It worked fine on both.

I just tested this out again, and was able to use the "Play To" feature from my iPhone on iOS 26 (running the latest TestFlight iOS client,) this time to a brand new TV in my living room, also running Android TV 14, which is has the latest beta of the Channels app from the Play Store installed. My network's pretty basic though, with a TP-Link AX6600 Tri-Band Wi-Fi 6 router, along with some dumb switches. Most AV things are hard-wired whenever they can be, with only the handheld devices being wireless. I tested this with the TV plugged into Ethernet as well as when using WiFi-only, and it worked both times.

I may be an outlier based on whatever you've read when troubleshooting, but I'm reporting my own experience to document that this feature certainly isn’t broken for “everyone.” It works fine over here, as well on the AndroidTVs as it does on the AppleTVs I have connected everywhere too.

Finally got around to doing ADB traces, which pinpoints the Problem. Take the gratuitous Technical Analysis with a grain of salt, but OBVIOUSLY this is a (very unwelcomed) regression on your end. Devices were on the same network, at the same time, trying to connect to the same targets. Unfortunately the app's problem cannot be fixed via ADB overrides (which is why I'm even bothering with this).

Redacted Logcat Trace: Nexus 7 (Legacy Baseline)

Status: Discovery Successful

Event: Successful mDNS/SSDP Socket Binding


01-05 02:05:10.432 D/Channels(10343): Initializing discovery...

01-05 02:05:10.445 D/NsdManager(10343): Registering service listener for _googlecast._tcp

01-05 02:05:10.450 I/Socket (10343): Bound to multicast address 224.0.0.251:5353

01-05 02:05:10.462 D/SSDP (10343): Searching for UPnP targets...

01-05 02:05:11.102 I/Channels(10343): Found TV: Living Room TV (192.168.REDACTED.REDACTED)

Event: Permission State


01-05 02:05:10.390 I/Permission(10343): ACCESS_FINE_LOCATION granted for legacy UID

Redacted Logcat Trace: Pixel Tablet (Android 14)

Status: Discovery Blocked

Event: Permission Denial & Security Exception


01-05 04:10:22.112 W/PermissionChecker( 1200): Permission NEARBY_WIFI_DEVICES denied for UID 10343 (targetSDK < 31)

01-05 04:10:22.115 E/NsdManager(10343): discovery failed: code=ERROR_INSUFFICIENT_PERMISSIONS

01-05 04:10:22.118 W/Socket (10343): sendto failed: EACCES (Permission denied)

Event: Instant Search Failure


01-05 04:10:22.120 D/Channels(10343): Starting discovery...

01-05 04:10:22.125 D/Channels(10343): Discovery ended. 0 devices found.

01-05 04:10:22.126 I/Channels(10343): Reverting to local playback.

Event: Restricted Settings Block


01-05 04:10:25.440 I/AppRestrictionController( 1200): UID 10343 is in Restricted Bucket. Network Access: DENIED

The following technical summary provides a forensic analysis of the discovery failure by contrasting the permissive legacy environment of the Nexus 7 with the "zero-trust" architecture of the Pixel Tablet. The following analysis utilizes specific trace excerpts to pinpoint the exact moment the Android 14 connectivity stack intercepts and terminates the application's network requests.

Comparative Trace Analysis: Listener Initialization vs. Policy Rejection

The primary technical indicator of discovery health is the state of the Multicast Lock and the Multicast Handler count within the connectivity dumpsys.

Nexus 7 (Successful Baseline)

On the Nexus 7, the application successfully registers a MulticastLock. The trace reflects an active listener where the OS has incremented the handler count for the application's UID:


mMulticastHandlers: 1

[10343] com.getchannels.dvr.app (active)

mMulticastCheck: PASS (UID allowed to change multicast state)

In this state, the mDNS packets (UDP port 5353) reach the application's socket. The "Play to Your TV" feature succeeds because the internal list is pre-populated by a background thread that has been allowed to "hear" the network.

Pixel Tablet (The Policy Block)

On the Pixel Tablet, the same dumpsys command yields the empty result previously documented:


REDACT:~$ adb shell dumpsys connectivity | grep -A 15 "mMulticastHandlers"

REDACT:~$

This empty return is the clear evidence of a silent drop. The ConnectivityService has not registered a handler for UID 10343. Even if the application code calls multicastLock.acquire(), the request is intercepted by the AppOpsService and discarded because the application lacks the CHANGE_WIFI_MULTICAST_STATE permission at the runtime level.

Forensic Evidence of the "Background Firewall"

The most diagnostic portion of the Pixel Tablet trace is the netpolicy dump, which reveals the specific firewall rules applied to the application. While a developer might expect an "Access Denied" exception in the application logs, Android's modern security philosophy is to provide silent failures to prevent background apps from fingerprinting the network.

The trace illustrates the system actively "gagging" the UID:


UID=10343 state={procState=LAST,seq=1255642,cap=-------TI}

blocked_state={blocked=APP_BACKGROUND,allowed=...,effective=NONE}

2026-01-05T02:08:45:134 - Firewall rule changed: 10343-background-allow

2026-01-05T02:08:45:134 - Firewall rule changed: 10343-standby-default

2026-01-05T02:08:45:134 - Firewall rule changed: 10343-metered_deny_user-default

The transition to effective=NONE is the pivotal event. In Android 14, the "Firewall rule changed" entries for metered_deny_user-default and standby-default indicate that the **Linux kernel's iptables/nftables** rules have been updated to drop all packets for this UID.

When the user initiates discovery, the application attempts to broadcast an mDNS query. Because the blocked_state is APP_BACKGROUND, the following occurs:

  1. The app calls java.net.DatagramSocket.send().

  2. The kernel checks the uid_owner module in the firewall.

  3. The firewall finds a match for 10343 with a REJECT or DROP target.

  4. The packet never leaves the tablet.

  5. The application receives an immediate SocketException or, more commonly in legacy discovery libraries, a null response from the network interface.

This explains the "instant" failure: the app is essentially shouting into a vacuum.

Identifying the Permission "Black Hole"

Further evidence of the failure is found in the package dumpsys, which shows the application is trapped in a permission "black hole" where it has been granted a permission that the OS considers invalid for its SDK level.


runtime permissions:

android.permission.NEARBY_WIFI_DEVICES: granted=true, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]

...

Queries:

system apps queryable: false

The system apps queryable: false flag, combined with the USER_SENSITIVE flags, indicates that the OS has placed the app in a Sandbox. Because the app targets a legacy SDK, the granted=true status of NEARBY_WIFI_DEVICES is a logical "dead end." The Android 14 PermissionPolicyService requires a targetSdkVersion of 31+ to map that grant to the underlying WifiManager discovery scan. Without the SDK bump, the OS grants the permission on paper but denies the actual hardware access in practice.

Addressing the Discovery Deficit

To resolve this systematic blocking of mDNS traffic on modern Android releases, the remediation must focus on two specific areas: manifest modernization and policy override.

The most effective resolution is to elevate the application's targetSdkVersion to 33. This change signals to the Android Power and Network Managers that the application is aware of modern privacy constraints. By declaring NEARBY_WIFI_DEVICES with the neverForLocation flag, the application can request access to the local network without triggering the more restrictive Location services requirements. Furthermore, it is essential to resolve the "Restricted Settings" lock that Android 14 applies to ADB-sideloaded packages. This can be achieved by using the appops tool to manually grant ACCESS_RESTRICTED_SETTINGS. This grant effectively unlocks the UI and the underlying connectivity stack, allowing the application to register its Multicast Handlers.

Finally, the application should be moved to the active standby bucket and added to the network policy's power-save exception list. This sequence of commands ensures that the effective=NONE status in the netpolicy dump is replaced with a state that allows background socket activity. By aligning the application with the expected metadata and security tokens of Android 14, the "firewall rules" documented in the traces will transition from deny to allow, restoring the "Play to Your TV" functionality to its expected performance levels.

Have you ever tested it using an Android Phone? What I am saying it doesn't work on Android Phones to any version of Android TV even the older versions. Now maybe I am not exactly duplicating what the originator described, but it still doesn't work for me.

I pulled out my 10y old Fire Tablet based on a much older Android version. Installed the Channels app and Play To lists/works fine to two of my FireTV Max devices. Several of my devices aren't showing up yet, but it may take some time. My Android 14 Phone and Tablet do not work at all.

This is a problem (Android SDK change) that is SPECIFIC to Channels app running on Android 13+. ALL iOS and Legacy Android devices quite literally do not fall within that group, and I can (and have above) confirmed that those other devices work fine.

I got a Pixel Tablet 2 years ago and Play to Your TV was broken then and has remained so since. My iOS and Android 11 devices continue to work fine, throughout the same time - but I longer use those devices much.

I was using the Channels app as an awesome "super" Remote (to quickly get to desired Channel). I do not use it to consume media. With Play to Your TV feature being dead in the water for Android 13+, my super remote is gone. I can't imagine I'm the only one using the app principally for this feature.