无网络情况下,使用Android GPS定位

需求背景:

手机的wifi连上了物联网设备,只能通信,没有网络数据。在这个前提下需要获得手机的经纬度。

解决办法:

1.尝试使用百度地图并且网络请求绑定为移动网络。结果:由于百度把网络请求的逻辑封装起来了,

没有办法进行绑定操作,失败!!!

2.尝试通过跨进程通信,开启一个新的进程专门用来进行定位请求,由于绑定移动网络到该进程时没有生效,所以也失败了!!

3.使用Android的GPS定位,没有网络也可以获取经纬度。赞一个!只不过在室内GPS基本不可行,这个是个弱点。

开发的思路:

作者的一点小建议:1.在百度这个的时候,看了很多人的分享,有很多是为了写这个而写的,也就是写给自己看的,所以看起来不是很清晰明了,这种要避免掉,不要因为这些而看了没耐心。2.看代码要看他的中心,有可能100行代码只有10行是中心,这个要学习观察,最好梳理一下流程,就像本文的GPS定位一样,最好梳理一下步骤。下面是我梳理的步骤。

实践步骤:

1.首先声明LocationManager变量,如下:

private LocationManager   lm;

lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

2.使用GPS定位,是通过将上面的lm的Provider设置LocationManager.GPS_PROVIDER。当然要在GPS打开的时候才能设置,否则不行,那么我们先做一个判断:

lm.isProviderEnabled(LocationManager.GPS_PROVIDER);

表示GPS是否可用。

3.可用的话,可以设置lm的定位周期,如下

//设置定位的周期(含义:使用GPS,变化为1秒,1米更新一次)

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,1,locationListener);

//顺便把LocationListener给写了,这个使用监听位置信息改变的类。

private LocationListenerlocationListener =new LocationListener() {

@Override

    public void onLocationChanged(Location location) {

Toast.makeText(GpsActivity.this,"位置信息正在变化,经纬度:" + location.getLongitude() +"/" +

location.getLatitude(), Toast.LENGTH_LONG).show();

}

@Override

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

}

@Override

    public void onProviderEnabled(String provider) {

}

@Override

    public void onProviderDisabled(String provider) {

Toast.makeText(GpsActivity.this,"定位不可用!", Toast.LENGTH_LONG).show();

}

};

4.可以获取最新的位置信息

//获取最新的定位信息

Location location=lm.getLastKnownLocation(locationProvider);


到这里就差不多了。

你可能感兴趣的:(无网络情况下,使用Android GPS定位)