【问题标题】:location listner do not calling onlocation change位置侦听器不调用位置更改
【发布时间】:2011-03-16 08:57:46
【问题描述】:

我在我的应用程序中使用位置侦听器。 我有这样的代码:

    public void startlistning()
    {   
            locationListener = new LocationListener() {
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
                // TODO Auto-generated method stub
            }
            @Override
            public void onProviderEnabled(String provider) {
                // TODO Auto-generated method stub
                Toast.makeText( getApplicationContext(),"Gps Enabled", Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onProviderDisabled(String provider) {
                // TODO Auto-generated method stub
                Toast.makeText( getApplicationContext(),"Gps Disabled", Toast.LENGTH_SHORT ).show();
            }
            @Override
            public void onLocationChanged(Location location) {
                // TODO Auto-generated method stub
                location.getLatitude(); 
                location.getLongitude();
            }
        };
        lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

但不知道为什么当我第一次重新启动设备时(没有可用的蜂窝数据(没有 SIM 卡)),方法 onLocationChanged 没有调用。但是,我在我的应用程序中使用了最佳提供商。 请调查此事。谢谢

【问题讨论】:

  • 您可能想提供一些有关如何调用此方法的详细信息。
  • 我只是在活动开始时调用 startlistning() 方法。为了调用 getLastKnownLocation() ,我创建了一个单独的类 MyLocationListner ,然后在评论中调用 getLastKnownLocation() 如下。请帮忙。谢谢

标签: android location listener


【解决方案1】:

更改设备位置时调用位置侦听器方法。重新启动设备时它不会启动。如果要调用 onLocationChanged 方法,则必须更改 device 的位置。


请尝试此操作以获取最后一个已知位置。

    LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

    Criteria locationCritera = new Criteria();
    locationCritera.setAccuracy(Criteria.ACCURACY_FINE);
    locationCritera.setAltitudeRequired(false);
    locationCritera.setBearingRequired(false);
    locationCritera.setCostAllowed(true);
    locationCritera.setPowerRequirement(Criteria.NO_REQUIREMENT);

    String providerName = locationManager.getBestProvider(locationCritera, true);
    Location location  = locationManager.getLastKnownLocation(providerName);

    Log.i("--- Latitude",""+location.getLatitude());
    Log.i("--- Latitude",""+location.getLongitude());

【讨论】:

  • 您好,有没有办法在不启动谷歌地图的情况下打开获取最后一个已知位置?当我重新启动设备时,我无法在我的应用程序中获取位置。
  • 嗨,我添加了获取最后已知位置的代码,然后在每次位置更改时存储到共享首选项中,因此当您重新启动设备时,您可以从共享首选项中获取它。
  • 实际上我在我的应用程序中做同样的事情,但是,我无法从 wi-fi 网络获取数据。它适用于蜂窝数据。我放置的相同代码供您参考。请查看是否需要更改或添加某些内容。我最后一个已知位置的代码如下:
  • 公共位置 getLastKnownLocation() { Location location=new Location(bestProvider); try { // 获取位置管理器... mLocMgr = (LocationManager)ctx.getSystemService(Context.LOCATION_SERVICE); //通过方法获取最佳位置提供者.. Criteria criteria = new Criteria(); bestProvider = mLocMgr.getBestProvider(criteria, true);位置 = mLocMgr.getLastKnownLocation(bestProvider); } catch(Exception e) { Log.i("位置异常", e.getMessage()); } 返回位置; }
猜你喜欢
  • 1970-01-01
  • 2020-08-27
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
相关资源
最近更新 更多