【问题标题】:wifi provider onLocationChanged is never calledwifi 提供商 onLocationChanged 永远不会被调用
【发布时间】:2012-06-25 03:11:33
【问题描述】:

我遇到了一个奇怪的问题。我使用 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"/> 

【问题讨论】:

  • 您在哪个设备上测试?
  • 尝试在 requestLocationUpdate() 中使用 new LocationListener()。还要检查您是否可以在设备的设置中接收网络 gps 数据。
  • 确保您允许设备使用位置信息,因为共享或使用位置信息需要用户同意。

标签: android location android-wifi


【解决方案1】:

我的猜测是,您无法从中获取位置更新的手机没有正确的数据连接。网络提供商需要 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;

}

【讨论】:

    【解决方案2】:

    请检查您的 onProviderDisabled 方法是否没有被立即调用。

    如果您发现在您的提供商注册后立即被呼叫,则表示您使用的手机已禁用定位服务。

    【讨论】:

      【解决方案3】:

      现在我怀疑 Google 定位服务在某些区域出现故障。我的应用程序重新开始工作,没有更改代码(来自 Play 商店的 apk)。

      【讨论】:

        【解决方案4】:

        ICS(4.0) 中进行测试时,我也遇到了与NetworkProvider 相同的问题,但在旧版本中工作正常(我测试了 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);
        

        替换上面的代码。这将帮助您获取位置更新。

        【讨论】:

          【解决方案5】:

          我遇到了同样的问题,如果有与“当前”相同的getLastKnownLocation,则不会调用onLocationChanged。这意味着你不会得到新的位置,因为没有新的报告...... 解决方案是使用最后一个已知位置,即使它很旧(如果您需要更精确/新的位置(如果发生这种情况),请继续侦听更新)。

          【讨论】:

            猜你喜欢
            • 2023-03-18
            • 2012-02-18
            • 2017-01-20
            • 1970-01-01
            • 2013-07-22
            • 2013-09-11
            • 2013-01-02
            • 2012-08-19
            • 2021-04-09
            相关资源
            最近更新 更多