提问者:小点点

有没有可能在不使用互联网的情况下从GPS获取经度和纬度?


我正在开发一个应用程序,因为我只想在不连接互联网的情况下从gps获取纬度和经度。我尝试过,但在关闭wifi时无法获取纬度值0。如果打开wifi,我将获取正确的纬度值。是否有可能在不连接互联网的情况下仅从gps获取纬度值?

我的代码

  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个答案

匿名用户

是的,绝对的。

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或无线三角测量或手机三角测量。

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

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

匿名用户

是的。您需要连接到LocationManager中的GPS提供程序并为其请求更新。不要使用条件,明确请求GPS。确保您具有FINE位置权限。

你不能这样使用getLastNotnSite。可能还没有位置,在这种情况下,它可以返回空数据或无效数据。你必须调用请求更新或请求单更新并等待Android获得位置锁并调用onLocationChange。永远不应该依赖getLast已知位置。它只在其他东西已经使用GPS时才有效,或者如果你有一个网络位置可以回退。