位置管理器显示“NETWORK_PROVIDER已禁用”

3

我需要通过3G或WIFI获取用户的位置。

这是我的尝试:

LocationListener locationListener = new LocationListener() {
            public void onLocationChanged(Location location) {
                manageLocation(location);
            }

            public void onStatusChanged(String provider, int status, Bundle extras) {

            }

            public void onProviderEnabled(String provider) {

            }

            public void onProviderDisabled(String provider) {

            }
        };
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

问题在于唯一被调用的回调函数是 onProviderDisabled,并且参数是 LocationManager.NETWORK_PROVIDER
我已经在清单文件中获取了该权限:
<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

我该如何在我的应用程序中启用这种类型的位置?

我可以确认@kkarakk的说法:即使启用了位置切换,Android Pie也会将LocationManager.NetworkProvider设置为禁用状态。 而且我无法启用它。顺便说一下,即使没有启用GPS,Google地图也不会显示任何位置。就我所记得的而言,在过去,我曾在没有GPS的情况下看到我的位置(基于网络?)。 但也许我记错了,我已经没有旧设备来验证了。 - hannes ach
1个回答

4

用户需要进入设备的设置应用程序并启用位置提供程序。您不能直接启用它。


所以用户需要启用GPS。 - Jayyrus
@JackTurky:用户需要启用位置信息,不一定是GPS。设备是否支持启用/禁用单个位置数据源取决于操作系统版本和在较小程度上的设备制造商。 - CommonsWare
@CommonsWare 但是我可以在设置中看到我的应用程序启用了位置。为什么我仍然无法使用它? - Zhen Liu
@user1017674:抱歉,我不明白你的意思。你可能需要在 Stack Overflow 上提出一个单独的问题,并提供一个 [mcve]。 - CommonsWare
3
即使位置切换已启用,Android 9(Pie)也会将LocationManager.NetworkProvider返回为禁用。今天遇到了这个问题。 - Karan Harsh Wardhan
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接