【发布时间】:2013-03-22 18:27:57
【问题描述】:
我正在开发一个应用程序,该应用程序可以在服务中的 6 分钟和 6 分钟内全天获取手机的位置,它工作正常,但有时网络提供商侦听器的方法 OnLocationChanged 停止被调用,我没有不知道为什么。
它由于某种原因停止被调用,但提供程序已启用并且列表器正在工作,当我手动启用或禁用提供程序时,onProviderEnabled 和 onProviderDisabled 被调用。
NETWORK_PROVIDER 会发生这种情况,GPS_PROVIDER 效果很好。
听众:
LocationListener locationListenerGPS = new LocationListener() {
// @Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO locationListenerGPS onStatusChanged
Log.d(TAG, "Provedor trocado");
}
// @Override
public void onProviderEnabled(String provider) {
Log.w(TAG, "PROVEDOR " + provider + " HABILITADO!");
}
// @Override
public void onProviderDisabled(String provider) {
Log.w(TAG, "PROVEDOR " + provider + " DESABILITADO!");
}
// @Override
public void onLocationChanged(Location location) {
longitudeGPS = location.getLongitude();
latitudeGPS = location.getLatitude();
Log.d(TAG,"LocationChangedGPS LAT: "+latitudeGPS+" longi: "+longitudeGPS);
gpsComSinal = true;
}
};
LocationListener locationListenerNET = new LocationListener() {
// @Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO locationListenerNET onStatusChanged
Log.d("Contele", "Provedor foi mudado");
}
// @Override
public void onProviderEnabled(String provider) {
Log.i(TAG, "PROVEDOR " + provider + " HABILITADO!");
}
// @Override
public void onProviderDisabled(String provider) {
Log.i(TAG, "PROVEDOR " + provider + " DESABILITADO!");
}
@Override
public void onLocationChanged(Location location) {
longitudeNET = location.getLongitude();
latitudeNET = location.getLatitude();
Log.d(TAG,"LocationChangedNET LAT: "+latitudeNET+" longi: "+longitudeNET);
netComSinal = true;
}
};
代码:
public void initProviders() {
localizacao = (LocationManager) getApplicationContext().getSystemService(LOCATION_SERVICE);
localizacao.removeUpdates(locationListenerNET);
localizacao.removeUpdates(locationListenerGPS);
localizacao.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
locationListenerGPS);
localizacao.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0,
0, locationListenerNET);
Log.d(TAG,"EsperaGPS");
Handler esperaGPS = new Handler() {
public void handleMessage(Message msg) {
requestGPS();
}
};
Message msgEsperaGPS = Message.obtain();
msgEsperaGPS.what = 0;
esperaGPS.sendMessageDelayed(msgEsperaGPS, 35000);
}
public void requestGPS() {
if (gpsComSinal) {
Log.d(TAG,"PEGO SINAL DE GPS");
rastreio = "GPS";
longitude = longitudeGPS;
latitude = latitudeGPS;
Log.d(TAG, "Utilizando provedor GPS.");
localizacao.removeUpdates(locationListenerGPS);
localizacao.removeUpdates(locationListenerNET);
} else {
Log.d(TAG,"Sem GPS... pegar NEt");
// Setando os valores para usar network
localizacao.removeUpdates(locationListenerGPS);
localizacao.removeUpdates(locationListenerNET);
localizacao
.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
0, 0, locationListenerNET);
Log.d(TAG,"EsperaNET");
requestNET();
}
}
public void requestNET() {
if (netComSinal) {
Log.d(TAG,"PEGO SINAL DE NET");
rastreio = "NET";
longitude = longitudeNET;
latitude = latitudeNET;
Log.d(TAG, "Utilizando provedor NET.");
localizacao.removeUpdates(locationListenerNET);
} else {
localizacao.removeUpdates(locationListenerGPS);
localizacao.removeUpdates(locationListenerNET);
Log.d(TAG,"Sem sinal");
}
}
三星 Galaxy S3 中的报告:
仍然连续 4 天收到“Sem sinal”。
Galaxy Y 和 LG Optimus l5 已经出现此问题
我进行了另一项测试,看看其他应用程序是否获得了 NET 位置,我发现它们通过了同样的问题,它们无法仅通过 GetLastknowLocation 获得 NET 位置;测试我使用 Galaxy S3 解决了这个问题,并禁用了 GPS Provider。 (在 Cerberus 中测试)。
我找不到任何解释为什么 NETWORKSLOCATIONS 听众停止给出位置,但这可能是因为它不应该连续工作 2 或 3 天。
我已经对其他应用程序进行了一些测试,看看这个问题是否只是在我的应用程序中发生,我发现它们正在通过同样的问题,例如在 Cerberus 中:
我在手机 (Galaxy S3) 中因“Sem sinal”问题禁用了 GPS 提供程序,看看:
我的报告:
和 Cerberus(打印于 2013 年 5 月 14 日)报告:
但是当我打开谷歌地图时,它似乎工作正常,我试图移动到一个较远的地方,看看它是否会显示GetLastknowLocation,但是没有,谷歌地图把我放在了正确的地方,所以我意识到谷歌地图正在使用motionevent在地图中移动我;
同时打印 Google Maps 的 Log 以获取 NetWorkProvider:
正常情况:
句号:
【问题讨论】:
-
这是因为网络提供商提供的不是您的位置,而是塔/bts 小区位置。我可能错了,但我认为如果你移动得足够多,你可能会捕捉到其他塔/bts 单元,并且你会在该网络侦听器中获得新位置。
-
已经过这个了,我试着移动了2000米+但是没有成功,如果我重启手机应用程序正常工作4或3天,在某些设备上这个问题从未发生过。我的 Galaxy S3 连续 2 天出现此问题,但它没有获得单一的网络位置,只有 GPS。
-
似乎设备 NetworkLocation Provider 坏了..我在一些 HTC 设备上也遇到过类似的问题,然后在网上搜索 HTC GPS 问题,发现很多用户抱怨 GPS 无法正常工作..跨度>
-
@Akhil 我认为这不是设备问题,因为它之前发生在其他手机上。
标签: android geolocation gps locationmanager locationlistener