是否可以在不使用互联网的情况下从GPS获取纬度和经度?

时间:2014-06-30 05:22:28

标签: android gps

我正在开发一个应用程序,因为我想从gps获得经度和经度,而无需连接互联网。我试过但是当wifi关闭时无法获得lat lng值零。如果wifi上我得到正确的lat long值。是否可以仅在没有连接到Internet的情况下从gps获取lat long值?

我的代码

  public class MainActivity extends Activity implements LocationListener{

    LocationManager locationManager ;
    String provider;

    private String strAdd;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      //  requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.activity_main);
      //  getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title);

        // Getting LocationManager object
        locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);


            Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

        //    locationManager.requestLocationUpdates(provider, 10, 30, this);

            if(location!=null){
                onLocationChanged(location);
            }
            else{
                Toast.makeText(getBaseContext(), "Location can't be retrieved",   
        Toast.LENGTH_SHORT).show();
            }

    }


    @Override
    public void onLocationChanged(Location location) {
        // Getting reference to TextView tv_longitude
        TextView tvLongitude = (TextView)findViewById(R.id.textView1);


        // Getting reference to TextView tv_latitude
        //TextView tvLatitude = (TextView)findViewById(R.id.tv_latitude);

        // Setting Current Longitude
        double lat = location.getLatitude();
        double lng = location.getLongitude();

      Log.e("LAT LNG", lat+lng+"");
        tvLongitude.setText("LAT LNG:" + lat+lng);



        // Setting Current Latitude
       // tvLatitude.setText("Latitude:" + location.getLatitude() );
    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub
    }

}

2 个答案:

答案 0 :(得分:1)

是的,绝对。

GPS无线电与互联网无关。有很多GPS设备没有互联网功能。反过来也是如此,也有很多设备没有真正的GPS无线电,但仍然通过网络提供商提供位置信息。

如果使用GPS_PROVIDER和ACCESS_FINE_LOCATION,LONG和LAT应来自GPS接收器,通常采用NMEA格式(协议)。 “互联网”用于通过AGPS,Wifi三角测量,蜂窝网络等添加粗略的补充位置。然而,真正的GPS仍然是基于GPS无线电。

检查您的应用权限是否包括:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

如果设备具有GPS无线电,则GPS不需要 的互联网连接。如果设备没有GPS无线电,则需要网络伪造GPS。即便如此,它不是“GPS”,而是AGPS或Wifi三角测量或细胞三角测量。

地球周围的星座中有32颗GPS卫星,因此“全球定位系统”中的“全球”卫星。 GPS不是基于对服务的访问。它基于三边测量,只需要设备上的无线电,以及32个卫星中的3个或4个的“视线”。它测量4颗卫星信号的时间延迟,精确到几米之内。如果它是基于其他任何东西,它是某种类型的“辅助”GPS,并且是一个粗略的位置。

在实践中,通常最好使用AGPS进行快速启动跟踪,或作为后备,因为真正的GPS航路点可能需要一点锁定,或者如果有障碍则根本不锁定,在某些情况下,任何地方都比没有好。另一方面,在某些情况下,您可能只需要真正的GPS位置,例如执法部门。我们是否应该根据街对面的Wifi路由器触发踝关节袖带警报,距离违规者所在的房屋/地理围栏数百英尺?

答案 1 :(得分:0)

是。您需要连接到LocationManager中的GPS提供程序并请求更新它。不要使用标准,明确要求GPS。确保您拥有FINE位置权限。

您不能像这样使用getLastKnownLocation。可能还没有位置,在这种情况下,它可以返回null或无效数据。您必须调用requestUpdates或requestSingleUpdate并等待Android获取位置锁定并调用onLocationChanged。永远不应该依赖getLastKnownLocation。它只有在其他东西已经在使用GPS的情况下才真正有效,或者如果你有一个网络位置,它可以回归到它。