为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 onSensorChanged 中使用 GoogleMap.addMarker?

如何在 onSensorChanged 中使用 GoogleMap.addMarker?

梵蒂冈之花 2022-06-23 18:03:57
onSensorChanged调用我的方法时如何旋转标记?我尝试了这段代码,但我得到了 NullPointerException。我声明mMap为全局变量并将其加载到 onMapReady 中。我想在我的onSensorChanged方法中使用它。我该如何解决?我收到了这个错误:java.lang.NullPointerException:尝试调用虚拟方法 'com.google.android.gms.maps.model.Marker com.google.android.gms.maps.GoogleMap.addMarker(com.google.android.gms.maps.model .MarkerOptions)' 在空对象引用上    @Override    public void onMapReady(GoogleMap googleMap) {        mMap = googleMap;        mMap.getUiSettings().setZoomControlsEnabled(true);        latLng_dest = getIntent().getExtras().getParcelable("latLng_dest");        Log.d("LatLng_dest : ", latLng_dest.toString());        if (ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_REQUEST);            return;        }        mMap.setMyLocationEnabled(true);        mMap.getUiSettings().setMyLocationButtonEnabled(false);        // Call our direction function        getDeviceLocation();    }    @Override    public void onSensorChanged(SensorEvent event) {        if (event.sensor == mRotationSensor) {            if (event.values.length > 4) {                float[] truncatedRotationVector = new float[4];                System.arraycopy(event.values, 0, truncatedRotationVector, 0, 4);                updateSensor(truncatedRotationVector);            } else {                updateSensor(event.values);            }        }    }    }
查看完整描述

2 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

通常,一旦您启动应用程序屏幕,onSenorChanged 就会触发。


通过这种方式,在传感器值更改后,您尝试旋转地图对象上的标记,该标记将为空,因为它是异步调用。


在调用“rotateMarker”方法之前进行空检查。


例子:


If (mMap != null) {

  // do rotate Map marker

}


注意:即使非常微小的变化,传感器值也会发生变化。只是为了提高性能,用 + 或 - 5 校准您的传感器值。


希望这些信息有帮助!


查看完整回答
反对 回复 2022-06-23
?
撒科打诨

TA贡献1934条经验 获得超2个赞

我解决它。解决方案是避免在 OnMapReady 之前调用 mMap.addMarker。我首先使用它来避免 mMap 上的 null 以及标记位置上为 null 的 addMarker 错误。


if (save) {

        temp_marker.remove();

        temp_marker = mMap.addMarker(markerOptions.rotation(azimuth));

    }

在我的 updateSensor 中,并在我的 getDeviceLocation 中添加了第一个位置标记后添加了这个:


save = true;

将保存定义为全局并初始化为假。


if (mMap != null)

没用。这就是为什么我很困惑。我没有注意到它在相同的语法中是双 nullPointerException。


查看完整回答
反对 回复 2022-06-23
  • 2 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信