Android - 通过Google Map获取当前位置

时间:2015-03-26 17:21:36

标签: java android google-maps google-maps-android-api-2

我正在开发与Google地图相关的应用。我已成功完成以下步骤。

  1. 创建用于访问Google地图的API密钥
  2. 在我的应用中添加了Google Play服务库
  3. 添加了必需的权限
  4. 使用SupportMapFragment
  5. 在我的活动中添加了地图
  6. 添加了一个单独的类MyMap.java来操作地图
  7. 将两个参数传递给此类 - Context的主要活动和对象的GoogleMap
  8. 打开Wi-Fi和GPS并运行应用
  9. 在此之后,我得到了具有漂亮外观和控件的地图。

    MyMap.java

    public class MyMap implements ConnectionCallbacks, OnConnectionFailedListener {
    
        private Context context;
        private GoogleMap map;
        private GoogleApiClient client = null;
    
        public MyMap(Context context, GoogleMap map) {
            this.context = context;
            this.map = map;
    
            client = new GoogleApiClient.Builder(context)
                    .addApi(LocationServices.API).addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this).build();
        }
    
    
    
        @Override
        public void onConnectionFailed(ConnectionResult arg0) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void onConnected(Bundle arg0) {
    
            Toast.makeText(context, "Connected", 1).show();
    
            Location mLastLocation = LocationServices.FusedLocationApi
                    .getLastLocation(client);
    
            if (mLastLocation != null) {
    
                Toast.makeText(
                        context,
                        String.valueOf(mLastLocation.getLatitude()) + ","
                                + String.valueOf(mLastLocation.getLongitude()), 1)
                        .show();
            }
    
        }
    
        @Override
        public void onConnectionSuspended(int arg0) {
            // TODO Auto-generated method stub
    
        }
    
    }
    

    问题

    在上面的课程中,我想干杯当前的位置。但它不是在烘烤任何东西。至少我需要看一个吐司说"连接"在onConnected 事件。我的实施有什么问题吗?

    提前致谢。

3 个答案:

答案 0 :(得分:3)

你似乎永远不会connect你的客户,所以如果onConnected被调用,那将是一个真正的惊喜:)

您使用

创建客户端
 client = new GoogleApiClient.Builder(context)
                .addApi(LocationServices.API).addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this).build();

但是要让客户做一些必须添加的内容:

client.connect(); 

答案 1 :(得分:1)

getLastLocation()只会给位置一次。要获得定期位置更新,您需要覆盖onLocationChanged()方法。你可以得到这个Link

答案 2 :(得分:1)

我找到的

最好的方式就是这样简单的实施活动:

public class MapActivity extends Activity implements GoogleMap.OnMyLocationChangeListener 

并覆盖方法

@Override
public void onMyLocationChange(Location location) {
    mMap.addMarker(new MarkerOptions().position(location).icon(
                BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
}

并且不要忘记map init方法中的mMap.setMyLocationEnabled(true);mMap.setOnMyLocationChangeListener(this);

全部!

另外,你可以点击这里查看地图:

public boolean checkMapsAvailable() {
    int isAvailable = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    if (isAvailable == ConnectionResult.SUCCESS) {
        return true;
    } else if (GooglePlayServicesUtil.isUserRecoverableError(isAvailable)) {
        Dialog dialog = GooglePlayServicesUtil.getErrorDialog(isAvailable, this, 9001);
        dialog.show();
    } else {
        Constants.showToast(Constants.ALERT_GOOGLEPLAY_CONNECTION);
    }
    return false;
}

希望这有帮助。