(Fix) Hey Google Not Controlling Phone
Have you been trying to use Google Assistant by talking to your phone only to find it not able to control things on your phone? You might say “Hey, Google” or “OK, Google,” your phone responds by presenting the Google Assistant, and you ask to skip a song or perform some other function related to your phone or tablet, Assistant will either do nothing or act as if there’s nothing to control. I have recently been dealing with this and it’s unclear to me how widespread this issue is. I recently found the cause and solution.
My experience
I enjoy listening to some music in the morning when I’m getting my day started. Much of that time, I can’t physically interact with my phone to skip or pause tracks. Instead, I’d say “OK, Google” and ask it to skip the song. For a long time, it has worked very well. However, at some point it stopped working at all.
Instead, I’d say “OK, Google” and see the Assistant appear on screen. Then I’d ask it to skip a track, only for my Nest Mini in another room tell me nothing is playing, followed by my music resuming where it left off. I even tried the alternative “Hey, Google” command with similar results and I tried being specific saying “skip the song on my phone” and nothing happened. I tried searching for an answer too, only to find none. Instead, I found comments on forums to specify a room or device, which I had already tried without success. When I asked about this myself, no one responded at all.
Thinking outside the box to find the answer
That’s when I pictured the path of how Assistant works with the smart home. What I mean by this is I started to map out how everything is connected to try and figure out where the connection is broken. Let’s say I say “OK, Google” to trigger the Assistant. My voice reaches the phone, the audio triggers a command to bring up the Assistant which is local to the phone. I then speak a command, the audio triggers the Assistant to query the cloud for how to respond. The cloud then delivers a response to my phone. If it can’t find my phone, it likely (guessing) sends the response to whatever Assistant it can reach instead. If the command is to control media (skip a song), the Assistant looks for the media to skip at the local level (the device responding). It doesn’t know my phone is playing music - it likely couldn’t reach it to begin with. As a result, it tells me nothing is playing.
That’s when it hit me - the cloud can’t respond to my phone, so it’s responding to whatever it can. Why can’t it reach my phone? Ah! That’s right! My ad-blocker on my phone is likely blocking Google from my phone! It’s the only thing I have on my phone that is capable of blocking network traffic from specific things.
I use an app called DNS66 to block ads. It works like a VPN, but isn’t really a VPN. I won’t get into details about VPNs here, but it does affect internet traffic by making you appear in a different location on a different network. VPNs can affect local access to networks (basically, 2 devices on the same network can’t see each other). But I don’t think it’s explicitly or necessarily the VPN aspect that caused the issue, but it’s possible.
I think the issue was more related to the explicit blocking of ad traffic. Basically, ad blocking blocks network traffic from specific sources that deliver ads. Google’s biggest business is on selling and delivering ads. It’s a safe bet that the fact an ad blocker might be blocking Google’s ads are also blocking other Google network traffic.
Solution
Fortunately for me, DNS66 has a feature in the app to add exceptions to certain apps. I simply added exceptions to the Google and Assistant apps. Doing this essentially “turns off” DNS66 for those apps, while keeping it active for others. The Google app thinks I have no ad blocker (or VPN maybe) because the network traffic is fully accessible.
For those using another type of ad blocker, you may need to look for ways to add exceptions or whitelist certain traffic or possibly disable your VPN when using Google Assistant. Many other ad blockers use a host file to determine what network traffic to allow or block rather than an app interface. You may need to look up the network addresses that communicate with Google’s servers and white list them. Unfortunately, I currently don’t know those.