华为卡槽修理多少钱 2025-06-27 23:47:40
东北传统炸套环 2025-05-10 11:52:20
淘宝虚假发货处罚规定是啥?作者:小果 时间:2025-06-13 阅读:4920 2025-06-13 00:16:05
姦字组词,包含姦字的词语 2025-05-25 17:57:35
怎么查询自己手机型号和版本 2025-05-03 07:21:33
世界杯女神 JieAV 免费成人电影福利视频在线观看 2025-05-08 07:58:19
淘宝验号是什么意思?怎么验号? 2025-07-13 15:54:35
索兰托越野能力 2025-05-30 04:49:32
原神5.5新增地灵龛在哪 2025-05-11 15:50:26
下意识的意思 2025-06-23 12:05:37

无网络情况下,使用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);

到这里就差不多了。