LocationManager:NETWORK_PROVIDER在没有启用GPS的情况下工作吗?

时间:2013-12-12 09:01:54

标签: android gps locationmanager locationlistener

我想知道为什么我的应用仍会找到位置,尽管GPS被禁用。所以我问myselft为什么这是可能的,我对此知之甚少。也许NETWORK_PROVIDER不需要GPS?

我保证,GPS确实被禁用了。

谁能告诉我这是怎么回事?

我在我的应用程序中有这个:

oncreate()中的

locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);

方式:

public void getGpsLocation(){
    locationManager.requestSingleUpdate(LocationManager.NETWORK_PROVIDER, myLocationListener, this.getMainLooper());
}

监听器:

LocationListener myLocationListener = new LocationListener() {

        // When location has changed
        public void onLocationChanged(Location location) {

            locationManager.removeUpdates(this);

            locationAll = location;

            // positionOnceFound = true  --> location was already found and no further update necessary
            //if (location != null && positionOnceFound == false) 
            if (location != null) 
            {
                // location is found, no more update necessary --> true
                positionOnceFound = true;

                // get Lat/Lon of my current position
                myPosLat = location.getLatitude();
                myPosLon = location.getLongitude();

                // For calculating the point B(right top corner) and point C(left bottom corner
                // Lat/Lon of B and C needed for getting the prices from this area around my position
                double dy = 5.0 / 110.54; // 5.0 -> 5km to vertical
                double dx = 5.0 / (111.320 * Math.cos(myPosLat / 180 * Math.PI)); // 5km to horizontal

                // Get point B
                rightTopCornerLon = myPosLon + dx;
                rightTopCornerLat = myPosLat + dy;
                // Get point C
                leftBottomCornerLon = myPosLon - dx;
                leftBottomCornerLat = myPosLat - dy;

                System.out.println("Alat: " + myPosLat + " Alon: " + myPosLon + " Blat: " + rightTopCornerLat + " Blon: " + rightTopCornerLon +
                      " Clat: " + leftBottomCornerLat + " Clon: " + leftBottomCornerLon);

                getCityName(isItStartOrStop);


             }
        }
        public void onProviderDisabled(String provider) {}
        public void onProviderEnabled(String provider) {}
        public void onStatusChanged(String provider, int status, Bundle extras) {}
    };

3 个答案:

答案 0 :(得分:0)

是的,NETWORK_PROVIDER不需要GPS,但NETWORK_PROVIDER通过无线网络站点获取低精度的位置。

答案 1 :(得分:0)

网络提供商需要ACCESS_COARSE_LOCATION的许可,因此它可以使用WIFI网络或移动网络为您提供位置更新,这可能不太准确,但比使用全球定位系统。

答案 2 :(得分:0)

是的,NETWORK_PROVIDER不需要GPS。 如果GPS未启用但位置不准确,网络提供商将通过无线网络访问您的位置。启用GPS将为您提供更准确的位置结果。 您在meanifeast文件中访问粗略位置和访问精确位置权限区分它。通过访问粗略位置,您将获得没有GPS的位置,但精确的位置也可以访问GPS位置 NETWORK_PROVIDER使用两种权限