【问题标题】:LocationManager doesn't update a locationLocationManager 不更新位置
【发布时间】:2013-01-06 11:05:49
【问题描述】:

获取当前位置的代码如下:

final LocationManager manager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
LocationListener listener=new LocationListener() {

    @Override
    public void onLocationChanged(Location location) {

        manager.removeUpdates(this);
        Toast.makeText(MainActivity.this, "2", Toast.LENGTH_LONG).show();
        if (location!=null) {
                                doSomeAction();
        }
        else {
            Toast.makeText(MainActivity.this, LOCATION_IS_NULL_MESSAGE, Toast.LENGTH_LONG).show();
        }
    }

    @Override
    public void onProviderDisabled(String provider) {
        manager.removeUpdates(this);
        String newProvider=provider.equals(LocationManager.GPS_PROVIDER) ? LocationManager.NETWORK_PROVIDER : null; 
        if (newProvider==null) {
            Toast.makeText(MainActivity.this, LOCATION_PROVIDERS_ARE_DISABLED_MESSAGE, Toast.LENGTH_LONG).show();
        }
        else {
            manager.requestLocationUpdates(newProvider, 0, 0, this);
        }
    }

    @Override
    public void onProviderEnabled(String provider) {}

    @Override
    public void onStatusChanged(String provider, int status,
            Bundle extras) {}

};
String provider=manager.isProviderEnabled(LocationManager.GPS_PROVIDER) ? LocationManager.GPS_PROVIDER : 
    LocationManager.NETWORK_PROVIDER;
Location location=manager.getLastKnownLocation(provider);
if (location!=null) {
                doSomeAction();
}
else {
    Toast.makeText(this, "1", Toast.LENGTH_LONG).show();
    manager.requestLocationUpdates(provider, 0, 0, listener);
}

我每次都看到 toast "1",但我从未见过 "2" toast,因此我的位置不会更新。请告诉我,我需要获取当前位置 - 如何解决我的问题?我使用网络位置提供程序。

【问题讨论】:

  • 你真的改变了你的位置吗?
  • 我在5米内改变了我的位置,但我相信如果没有最后一个已知位置,我会立即得到我的当前位置,因为我只需要得到当前位置。
  • 为了确保它工作,尝试模拟相当大的location change in emulator
  • 但是我的代码是对的吗?
  • 尝试删除manager.removeUpdates(this);在onLocationChanged

标签: android android-location locationlistener


【解决方案1】:

你真的附加了监听器吗?如果没有附加监听器,它的代码是无用的,但此外 afaik:如果 LocationManager 没有附加监听器,它将不会更新任何位置。

【讨论】:

    【解决方案2】:

    试试这样:

    public class Locato extends Activity implements LocationListener {
    
    LocationManager locman;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.idlayout);
    locman = (LocatonManager) getSystemService(Context.LOCATION_SERVICE);
    
    }
    
     public void onStatusChanged(String pr, int s, Bundle a) {}
    
     @Override
        public void onProviderDisabled(String provider) {
           Log.d("MyApp", "Provider disabled : " + provider);
        }
    
        @Override
        public void onProviderEnabled(String provider) {
    Log.d("MyApp", "Provider enabled : " + provider);
    }
    
     @Override
        public void onLocationChanged(Location location) {
    // do something
        }
    

    您还必须为清单添加权限:访问粗略位置和访问精细位置

    【讨论】:

      猜你喜欢
      • 2014-04-03
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多