Java 安卓-通过谷歌地图获取当前位置

Java 安卓-通过谷歌地图获取当前位置,java,android,google-maps,google-maps-android-api-2,Java,Android,Google Maps,Google Maps Android Api 2,我正在开发一个与谷歌地图相关的应用程序。我已经成功地完成了以下步骤 创建API密钥以访问Google地图 在我的应用程序中添加了Google Play服务库 添加了所需的权限 使用SupportMapFragment 添加了一个单独的类MyMap.java来操作映射 向此类传递了两个参数-主要活动的上下文和谷歌地图的对象 打开Wi-Fi和GPS并运行应用程序 在此之后,我得到了漂亮的外观和控制地图 MyMap.java public class MyMap implements Connecti

我正在开发一个与谷歌地图相关的应用程序。我已经成功地完成了以下步骤

  • 创建API密钥以访问Google地图
  • 在我的应用程序中添加了Google Play服务库
  • 添加了所需的权限
  • 使用
    SupportMapFragment
  • 添加了一个单独的类
    MyMap.java
    来操作映射
  • 向此类传递了两个参数-
    主要活动的上下文和
    谷歌地图的对象
  • 打开Wi-Fi和GPS并运行应用程序
  • 在此之后,我得到了漂亮的外观和控制地图

    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
    事件我的实现有什么问题吗

    提前感谢。

    您似乎从来都不是您的客户,因此如果调用
    onConnected
    将是一个真正的惊喜:)

    您可以使用

     client = new GoogleApiClient.Builder(context)
                    .addApi(LocationServices.API).addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this).build();
    
    但要让客户做一些事情,您必须添加:

    client.connect(); 
    
    你似乎从来没有见过你的客户,所以如果调用
    onConnected
    ,那将是一个真正的惊喜:)

    您可以使用

     client = new GoogleApiClient.Builder(context)
                    .addApi(LocationServices.API).addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this).build();
    
    但要让客户做一些事情,您必须添加:

    client.connect(); 
    

    getLastLocation()只提供一次位置。要获得定期的位置更新,需要重写onLocationChanged()方法。您可以得到这个

    getLastLocation()只会给出一次位置。要获得定期的位置更新,需要重写onLocationChanged()方法。你可以得到这个

    我发现的最好的方法是简单地实施你的活动,如下所示:

    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)));
    }
    
    不要忘记
    mMap.setMyLocationEnabled(true)
    mMap.setOnMyLocationChangeListener(此)

    就这些

    此外,您还可以检查地图是否可用,如下所示:

    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;
    }
    

    希望这能有所帮助。

    我发现最好的方法是简单地执行以下活动:

    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)));
    }
    
    不要忘记
    mMap.setMyLocationEnabled(true)
    mMap.setOnMyLocationChangeListener(此)

    就这些

    此外,您还可以检查地图是否可用,如下所示:

    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;
    }
    

    希望这能有所帮助。

    您是如何创建MyMap的?我的问题是
    context
    ,但我们看不到您发送给它的是什么…我从我的主要活动中发送“这个”?您是如何创建我的地图的?我的问题是
    context
    ,但我们看不到您向它发送了什么…我从我的主要活动中发送了“这封信”,非常感谢。我对我的'cllient'对象使用了connect()方法。它工作得很好。再次感谢。到时候你可以接受我的回答。玩得开心。嘿,非常感谢。我对我的'cllient'对象使用了connect()方法。它工作得很好。再次感谢。到时候你可以接受我的回答。玩得开心,谢谢。我也在找这个。谢谢。我也在找这个。