requestRouteToHost android

2020-05-08 19:03发布

问题:

Greetings everyone! I'm getting rather fed up with android's ConnectivityManager class. I've been trying for 5 hours to get the requestRouteToHost to work. I'm running my code on the emulator but the requestRouteToHost always fails. I know I have connectivity because I called getActiveNetworkInfo() and it was connected. I've added the ACCESS_NETWORK_STATE and CHANGE_NETWORK_STATE permissions to no avail. Any tips would be greatly appreciated.

EDIT-------- The method InetAddress.isReachable fails as well. I was using the hostname java.sun.com as specified in the docs. I think this is a problem with the emulator. Sam

回答1:

Looks like requestRouteToHost() is not implemented for WiFi. WifiStateTracker private class does not have requestRouteToHost() implementation. Instead, default implementation from base class NetworkStateTracker always returns false.



回答2:

I would recommend testing requestRouteToHost() with a real host. Not only am I unconvinced that localhost as a name is necessarily recognized on Android, it's going to be the device/emulator itself, which would go out via neither WiFi nor 3G, so I would expect requestRouteToHost() to fail.

You might also have a problem with wherever you are getting lookupHost() from. For example, I am not sure if this implementation supports localhost.



回答3:

The requestRouteToHost(lookupHost()) combination you are doing is very risky

See your code:

conn_man.requestRouteToHost(ConnectivityManager.TYPE_WIFI, lookupHost("localhost")))

Here, you first made a host lookup, and next you are requesting a route to it. It will work fine only for static addresses (like localhost), where no real lookup is done. If you need a DNS lookup to resolve host address, it will fail easily. Generally, requestRouteToHost is handy for static addresses only.