【问题标题】:Current Loation is not picking in android当前位置不在android中选择
【发布时间】:2013-01-21 12:11:43
【问题描述】:

我现在正在进行一个与 Google 地图服务相关的项目。我想在我的地图上指出我当前的位置。为此,我有了使用 itemizedoverlay 的想法。我在 Geopoint 的帮助下检索当前位置。但是当我在我的代码中使用 itemizedoverlay 时,无法获取该位置,我在我的 OnCreate 方法中使用它。如果我将其移至 OnLocationChanged 方法,则 GeoPoint(point) 将不会被 itemizedoverlay 拾取并且会以错误结束,在目前的情况下,应用程序会被压垮。

        MapView mapView;
    Location location;
    LocationManager locationmanager;
    LocationListener locationlistener; 

        public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

      mapView = (MapView) findViewById(R.id.mapView);
      mapView.setTraffic(true);
      mapView.setBuiltInZoomControls(true);

        //locationmanager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);  
   // locationlistener = new GPSLocationListener();
      //  locationmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER 0,0,locationlistener);                                                                                         

      GeoPoint point = new GeoPoint(
                (int) (location.getLatitude() * 1E6), 
                (int) (location.getLongitude() * 1E6));

            Toast.makeText(getBaseContext(), 
                "Latitude: " + location.getLatitude() + 
                " Longitude: " + location.getLongitude(), 
                Toast.LENGTH_SHORT).show();

      List<Overlay> mapOverlays = mapView.getOverlays();
      Drawable drawable = this.getResources().getDrawable(R.drawable.icon);


          HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,this);
          OverlayItem overlayitem = new OverlayItem(point,"","" );
          itemizedoverlay.addOverlay(overlayitem);
          mapOverlays.add(itemizedoverlay);

}

/*      private class GPSLocationListener implements LocationListener 
      {
        @Override
        public void onLocationChanged(Location location) {
          if (location != null) {
            GeoPoint point = new GeoPoint(
                (int) (location.getLatitude() * 1E6), 
                (int) (location.getLongitude() * 1E6));

            Toast.makeText(getBaseContext(), 
                "Latitude: " + location.getLatitude() + 
                " Longitude: " + location.getLongitude(), 
                Toast.LENGTH_SHORT).show();

            OverlayItem overlayitem = new OverlayItem(point,"","" );
              itemizedoverlay.addOverlay(overlayitem);
              mapOverlays.add(itemizedoverlay);

}
        } */


    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderDisabled(String provider) {

Toast.makeText(getBaseContext(),"GPS Disabled",Toast.LENGTH_SHORT).show();      

    }

    @Override
    public void onProviderEnabled(String provider) {

        Toast.makeText(getBaseContext(),"GPS Enabled",Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

你能建议我解决这个问题吗?提前致谢,如果我在这里犯了任何错误,我们深表歉意。

【问题讨论】:

    标签: android google-maps itemizedoverlay


    【解决方案1】:

    您可以使用 com.google.android.maps.MyLocationOverlay,它会自动在地图视图上显示您的位置。它甚至会在旅行时更新您的位置。

    注意:您分别在 onResume 和 onPause 上显示调用 enableMyLocation 和 disableMyLocation 以获得更好的性能。

    @Override
        protected void onResume() {
            super.onResume();
            if (locationOverlay != null)
                locationOverlay.enableMyLocation();
        }
    
        @Override
        protected void onPause() {
            if (locationOverlay != null)
                locationOverlay.disableMyLocation();
            super.onPause();
        }
    

    已编辑

    MyLocationOverlay locationOverlay;
    
    public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
    
          mapView = (MapView) findViewById(R.id.mapView);
          mapView.setTraffic(true);
          mapView.setBuiltInZoomControls(true);
    locationOverlay = new MyLocationOverlay(this, mapView);
    List<Overlay> mapOverlays = mapView.getOverlays();
     mapOverlays.add(locationOverlay);
    }
    

    同时添加 onResume() 和 onPause() 方法。

    【讨论】:

    • 即使我没有在地图中获得当前位置,它会工作吗兄弟?
    • GPS 位置并不总是在室内特别可用。因此,如果您为 GPS 提供商设置了位置监听器并且您在室内,那么您可能无法接收到 GPS 信号。 MyLocationOverlay 查找要使用的提供程序并设置位置侦听器并为您获取位置
    • 如果您看到 enableMyLocation 的文档,它会显示“尝试启用 MyLocation,注册来自 LocationManager.GPS_PROVIDER 和 LocationManager.NETWORK_PROVIDER 的更新。”因此它注册了两个提供者,您无需担心设置监听器并再次更新覆盖以进行更新。
    • 您能否发布此代码:com.google.android.maps.MyLocationOverlay。昨天开始我正在为此尝试,但仍然不知道。我在其他地方找到了这种方法。但不知道如何在我的代码中使用它。我尽力了。很抱歉,我在该领域没有太多经验。
    • 嗨,Vivek,感谢您的友好和早日回复;我还有一个疑问,如果不检索位置(Geopoint),我们如何在地图中指出它?
    【解决方案2】:

    试试这个 -

    /**
    * Setting Google Map to provided location 
    */
     private void setMaptoLocation(Location location) {
      mapView.setBuiltInZoomControls(true);
      mapView.setSatellite(true);
      int LAT = (int)(location.getLatitude() * 1E6) ;
      int LNG = (int)(location.getLongitude() * 1E6) ;
      GeoPoint point = new GeoPoint(LAT, LNG);
      mapController = mapView.getController();
      List<Overlay> mapOverlays = mapView.getOverlays();
      Drawable drawable = this.getResources().getDrawable(R.drawable.icon);
      HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,this);
      OverlayItem overlayitem = new OverlayItem(point,"","" );
      itemizedoverlay.addOverlay(overlayitem);
      mapOverlays.add(itemizedoverlay);
      mapController.setZoom(ZOOM_LEVEL - ZOOM_LEVEL / 2); // Set zoom level per requierment
      mapController.animateTo(point);
    
     }
    

    【讨论】:

    • 这对我也不起作用兄弟。使用drawable显示一些错误。
    • 哦...我虽然你会添加可绘制...无论如何...我已经编辑了我的帖子...请..现在使用...仍然收到错误..请发布 logcat 跨度>
    • 这里显示的位置也在其他地方。似乎更靠近南非的几内亚湾。我认为这可能与地理点问题有关。但它有点工作。你有什么想法吗?
    • 很高兴知道它有效。关于位置不确定您如何将位置传递给此函数。它应该是- setMaptoLocation((int)(location.getLatitude() * 1E6), (int) (location.getLongitude() * 1E6));
    • 无论你得到什么纬度/经度,你也可以在网络上的谷歌地图中交叉检查。
    【解决方案3】:

    location 不是您在 onCreate() 中初始化的位置,所以我猜它为空。还有一件事,如果你有纬度和经度,逐项列出的肯定会在地图上显示位置。 在 Manifest 中检查 Access_Course_locationAccess_fine_location 所需的权限。

    【讨论】:

    • 我已经在 manifest 兄弟中定义了。它还提供了:
    • 您的 Toast 节目是否时长?你没有在哪里注册位置管理器那么你怎么能读到位置
    【解决方案4】:

    我认为你必须使用Google Maps Android API v2

    更多信息请查看Google Maps Android API v2

    请查看上述链接中的示例代码链接。 sample code

    【讨论】:

    • 感谢您的友好回复。但是,该链接并没有解释我真正想要的。它只处理获取地图。我想用图标在我的地图中指出当前位置。
    • 该链接中有示例代码的链接。请检查我更新的代码。
    • @Rahul 为什么?有什么必要?
    • @Coder 不需要。但是使用 API v2,我们可以轻松搞定。
    • @RahulPatel 我认为你的回答不相关,应该被否决
    猜你喜欢
    • 2021-03-22
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2022-12-07
    • 2011-07-15
    • 1970-01-01
    • 2014-07-16
    • 2016-12-01
    相关资源
    最近更新 更多