我正在开发一个应用程序,因为我想从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
}
}
答案 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的情况下才真正有效,或者如果你有一个网络位置,它可以回归到它。