我遇到了一个奇怪的问题。我使用wifi来检索用户位置。我在几部手机上测试过;在其中一些,我永远不会得到位置更新。似乎永远不会调用onLocationChanged方法。我的代码附在下面..任何建议赞赏!!!
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LocationManager locationManager;
locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
String provider = locationManager.NETWORK_PROVIDER;
Location l = locationManager.getLastKnownLocation(provider);
updateWithNewLocation(l);
locationManager.requestLocationUpdates(provider, 0, 0,
locationListener);
}
private void updateWithNewLocation(Location location) {
TextView myLocationText;
myLocationText = (TextView)findViewById(R.id.myLocationText);
String latLongString = "No location found";
if (location != null) {
double lat = location.getLatitude();
double lng = location.getLongitude();
latLongString = "Lat:" + lat + "\nLong:" + lng;
}
myLocationText.setText("Your Current Position is:\n" +
latLongString);
}
private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
updateWithNewLocation(location);
Log.i("onLocationChanged", "onLocationChanged");
Toast.makeText(getApplicationContext(), "location changed",
Toast.LENGTH_SHORT).show();
}
public void onProviderDisabled(String provider) {}
public void onProviderEnabled(String provider) {}
public void onStatusChanged(String provider, int status,
Bundle extras) {}
};
清单
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"
/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
答案 0 :(得分:2)
我的猜测是,您没有获得位置更新的手机没有正确的数据连接。网络提供商需要GSM / 3G或WiFi数据连接,以使用手机的手机/ wifi数据从Google服务器检索位置修复。您可以使用以下方法进行检查。
public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
return false;
}
答案 1 :(得分:0)
请检查您的onProviderDisabled方法是否未立即被调用。
如果您发现在提供商注册后立即呼叫,则表示您所在的电话已禁用位置服务。
答案 2 :(得分:0)
现在我怀疑谷歌定位服务在某些地区出现了问题。我的应用程序再次开始工作,没有更改代码(来自Play商店的apk)。
答案 3 :(得分:0)
我在NetworkProvider
(4.0)中测试ICS
时遇到了同样的问题,但在旧版本(我测试的2.2和2.3.3)中工作正常。这是我在ICS
中找到并正常工作的解决方案。请使用Criteria
获取位置更新,如下所示:
LocationManager locationManager= (LocationManager) <YourAct>
.getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE); //ACCURACY_COARSE or ACCURACY_FINE based on usage
String provider = locationManager.getBestProvider(criteria, true);
// Register the listener with the Location Manager to receive location
// updates
locationManager.requestLocationUpdates(provider, 0, 0, locationListener);
替换上面的代码。这将有助于您获取位置更新。
答案 4 :(得分:0)
我遇到了同样的问题,而且如果onLocationChanged
与&#34;当前&#34;相同,则不会调用getLastKnownLocation
。这意味着您将无法获得新的位置,因为没有新的报告...
解决方案是使用最后一个已知位置,即使它已经很老了(如果你需要更精确/新位置(如果出现这种情况),继续监听更新)。