【问题标题】:GOOGLE MAPS API - How to get my position without map.setMyLocationEnabled(boolean)?GOOGLE MAPS API - 如何在没有 map.setMyLocationEnabled(boolean) 的情况下获得我的位置?
【发布时间】:2020-02-14 08:53:06
【问题描述】:

我对单击按钮时如何获取我的位置感到困惑。

我正在尝试使用下面的代码:

private void showMyLocation() {
    FusedLocationProviderApi fusedLocationApi = LocationServices.FusedLocationApi;
    Location location = fusedLocationApi.getLastLocation(googleApiClient);

    LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());

    CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLng(latLng);

    map.animateCamera(cameraUpdate);
}

结果是强制关闭应用程序。我无法读取 logcat ,因为应用程序崩溃时 logcat 消失了。

有什么建议吗?

【问题讨论】:

  • 即使您的应用程序崩溃了,您也可以在 Android Studio 底部的“运行”选项卡中找到您的应用程序日志。
  • 或者你可以添加 try-catch 块来捕捉你的异常
  • 您是否在设备上申请了位置权限?不看日志很难知道。我过去确实做过这个location repository,这可能会帮助您了解在 Android 上进行定位的基础知识。
  • @VishalBari 我是用 try catch 做的,而她什么也没抓住
  • @AndrewSteinmetz 是的,我被接受了请求权限

标签: java android google-maps


【解决方案1】:

首先在全局范围内创建Location mLocation,然后在 onLocationChanged 内部创建

    @Override
    public void onLocationChanged(Location location) {
    mLastLocation = location;}

然后

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    btn = findViewById(R.id.btn);
    // add code 
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (mLastLocation != null) {
                LatLng latLng = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());
                lat = mLastLocation.getLatitude();
                Log.d("MapActivity", "lat of current" + lat);
                lng = mLastLocation.getLongitude();
                Log.d("MapActivity", "lng of current" + lng);

                if (marker != null) {
                    marker.remove();
                }

                marker = mMap.addMarker(new MarkerOptions()
                    .position(latLng)
                    .title("You are here!!!")
                    .icon(BitmapDescriptorFactory.fromResource(R.drawable.a1)));
                mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15));
            }
        }          
    }
});

【讨论】:

  • 通过实现 OnMapReadyCallback、GoogleApiClient.ConnectionCallbacks、GoogleApiClient.OnConnectionFailedListener、LocationListener 来实现您的类,它将为您生成覆盖方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多