使用 LocationListener 监听位置,代码如下:
LocationListener locationListener = new LocationListener() {
/**
* 位置发生变化
* @param location
*/
@Override
public void onLocationChanged(Location location) {
}
/**
* GPS关闭
* @param provider
*/
@Override
public void onProviderDisabled(String provider) {
}
/**
* GPS开启
* @param provider
*/
@Override
public void onProviderEnabled(String provider) {
// 当GPS LocationProvider可用时,更新位置
setGpsStatus(0);
}
/**
* GPS 状态发生变化
* @param provider
* @param status
* @param extras
*/
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
switch (status) {
// GPS状态为可见时
case LocationProvider.AVAILABLE:
break;
// GPS状态为服务区外时
case LocationProvider.OUT_OF_SERVICE:
break;
// GPS状态为暂停服务时
case LocationProvider.TEMPORARILY_UNAVAILABLE:
break;
}
}
};
如上,onStatusChanged 应该是监听GPS状态变化的,是否连接中或断开,但我在测试时,一直未触发上面的代码,
后来我用连接卫星的个数来判断:
GpsStatus.Listener listener = new GpsStatus.Listener() {
public void onGpsStatusChanged(int event) {
switch (event) {
// 第一次定位
case GpsStatus.GPS_EVENT_FIRST_FIX:
break;
// 卫星状态改变
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
GpsStatus gpsStauts= locationManager.getGpsStatus(null); // 取当前状态
int maxSatellites = gpsStauts.getMaxSatellites(); //获取卫星颗数的默认最大值
Iterator<GpsSatellite> it = gpsStauts.getSatellites().iterator();//创建一个迭代器保存所有卫星
int gpsCount = 0;
while (it.hasNext() && gpsCount <= maxSatellites) {
GpsSatellite s = it.next();
//可见卫星数量
if(s.usedInFix()){
//已定位卫星数量
gpsCount++;
}
}
if( gpsCount == 0 && gpsStatus == 1 ){
//setGpsStatus(0);
}
break;
// 定位启动
case GpsStatus.GPS_EVENT_STARTED:
break;
// 定位结束
case GpsStatus.GPS_EVENT_STOPPED:
break;
}
};
};
如果连接的个数为 0 表示GPS已掉线... 不过这样做还是有点问题,不是很准确 和 GPS Test
这个 APP 对比
请问大家,是写的不对还是什么原因?我主要是想获取GPS连接的状态,如果断开就实时显示,看网上有说
requestLocationUpdates(LocationManager.GPS_PROVIDER, 30000, 0, locationListener);
这里的时间 和 距离设置的范围太大等问题,距离我有设置过 0,8等,时间有设置过 3000都测试过还是不行
请教大家怎么修改呢?先谢!!
GPS 권한이 추가되었나요?