(Android)如何使用Google Play服务检索当前位置

时间:2015-03-04 10:39:23

标签: java android location google-play-services

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

3 个答案:

答案 0 :(得分:3)

您可以使用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为您提供帮助

答案 1 :(得分:0)

当前位置=最后位置

这是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());

                  }
             });

      }

}

您需要添加<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
上面的代码是简化版本。如果您的应用程序在Android Lollipop及更高版本上运行,则需要要求Location permission at runtime ALSO

您可以看到完整的代码HERE

答案 2 :(得分:0)

您无需在最新的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) {

            }
        };