代码之家  ›  专栏  ›  技术社区  ›  D.T

无法获取真实android设备上的当前位置

  •  0
  • D.T  · 技术社区  · 10 年前

    我需要获取当前位置的Lat和Long来绘制路线,我的代码在模拟器上运行,但当我在真实设备上调试时,它不会。这是我获取当前位置的方法:

    private void gotoCurrentLocation(){
         mMap.setMyLocationEnabled(true);
         LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
         locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,listener);
         Location myLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    
         if(myLocation==null) { MYPLACE = null; return;}
         MYPLACE = new LatLng(myLocation.getLatitude(),myLocation.getLongitude());
         mMap.addMarker(new MarkerOptions().position(ll).title("You're here"));
    }
    
    LocationListener listener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {
            MYPLACE = new LatLng(location.getLatitude(),location.getLongitude());
        }
    

    这是GenyMotion虚拟设备上的地图。当我在真实设备上调试时,地图在当前位置也有一个蓝色的小点,就像在虚拟设备上一样,但是 MYPLACE 为空,无法在当前位置放置标记。代码有什么问题吗?有人能帮帮我吗!!

    route

    这是在真实设备上:

    enter image description here

    1 回复  |  直到 10 年前
        1
  •  0
  •   Prokash Sarkar    10 年前

    这可能会发生,因为在某些设备上,GPS需要一些时间来初始化。 如果您在GPS初始化之前请求当前位置,您肯定会得到一个空位置值 ,因为GPS尚未初始化。

    有几种方法可以防止这种情况。我建议您使用Play Services进行位置检测,或者您可以使用名为,

    Android-ReactiveLocation

    您可以请求反应位置获取最后一个已知位置,这将防止获得空值,

    ReactiveLocationProvider locationProvider = new ReactiveLocationProvider(context);
    locationProvider.getLastKnownLocation()
        .subscribe(new Action1<Location>() {
            @Override
            public void call(Location location) {
                doSthImportantWithObtainedLocation(location);
            }
        });
    
    推荐文章