I am making some tests with the requestLocationUpdates() function from the FusedLocationApi. I am using the PRIORITY_BALANCED_POWER_ACCURACY. A cit
When you ask for the ACCESS_COARSE_LOCATION permission, the fused location client will give you a city block accuracy, that's the intended behavior and it's written in the documentation. Have a look here under "Specify App Permissions"
What I can suggest is that you use the regular android location provider (not fused location) and try to access the NETWORK provider. It should give you WIFI accuracy.