【问题标题】:(Android) How to retrieve current location using Google Play Services(Android) 如何使用 Google Play 服务检索当前位置
【发布时间】:2015-03-04 10:39:22
【问题描述】:

我是 Android 应用开发的新手,我目前正在研究使用 Google Play 服务 检索用户的当前位置(坐标和城市)。截至目前,我找不到任何明确的分步教程。 任何建议或指导将不胜感激!

【问题讨论】:

标签: java android location google-play-services


【解决方案1】:

您可以使用 Google Play 服务库中的 fused location provider API 来检索设备的 last known location

 Location lastLocation = LocationServices.FusedLocationApi
                .getLastLocation(mGoogleApiClient);

    if (lastLocation != null) {
        double latitude = lastLocation.getLatitude();
        double longitude = lastLocation.getLongitude();

//Once you get the coordinates, you can retrieve the city name using the Geocoder class:

        Geocoder gcd = new Geocoder(getBaseContext(), Locale.getDefault());
        List<Address> addresses;
            addresses = gcd.getFromLocation(latitude, longitude, 1);
            if (addresses != null) {
                if (addresses.size() > 0)
                    String cityName = addresses.get(0).getLocality();

            }

         }

在您的清单中:

  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

这里是a detailed tutorial 为您提供帮助

【讨论】:

    【解决方案2】:

    当前位置 = 最后位置

    这就是 Google Android 文档中关于使用 FusedLocationProvider

    获取当前位置的内容

    在大多数情况下,您对用户的当前位置感兴趣, 这通常相当于设备的最后一个已知位置。

    如何做到这一点?

    你可以用这个方法

    public void getCurrentLocation() {
    
          FusedLocationProviderClient locationProviderClient = LocationServices.
                                               getFusedLocationProviderClient(this);
    
    
         locationProviderClient.getLastLocation()
                .addOnSuccessListener(new OnSuccessListener<Location>() {
    
                      @Override
                      public void onSuccess(Location location) {
    
                         Log.d("Location",currentLocation.toString());
                     
                      }
                 });
    
          }
    
    }
    

    您需要添加&lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;
    上面的代码是简化版。如果您的应用在 Android Lollipop 及更高版本上运行,那么您需要询问 Location permission at runtimeALSO

    你可以看到完整的代码HERE

    【讨论】:

      【解决方案3】:

      最新的google play服务不需要连接GoogleApiClient,直接请求位置更新即可。

      mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
      
              locationRequest = LocationRequest.create();
              locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
              locationRequest.setInterval(20 * 1000);
      mFusedLocationProviderClient.requestLocationUpdates(locationRequest,locationCallback, Looper.myLooper());
              locationCallback = new LocationCallback() {
                  @Override
                  public void onLocationResult(LocationResult locationResult) {
      
                  }
              };
      

      【讨论】:

        猜你喜欢
        • 2019-03-20
        • 2017-08-03
        • 2017-10-25
        • 1970-01-01
        • 1970-01-01
        • 2017-02-12
        • 1970-01-01
        相关资源
        最近更新 更多