【问题标题】:android - keep google map fragment zoomed in on location when leaving appandroid - 离开应用程序时保持谷歌地图片段在位置上放大
【发布时间】:2023-03-06 15:58:02
【问题描述】:

我有一个定位服务,它在后台运行并更新片段中用户的位置。

当关闭应用程序时,服务会以startForeground() 进入前台并显示正在进行的通知。

当我点击通知时,它会打开应用程序,但我要更改的是地图全部缩小了,我必须等待下一个位置更新才能放大地图。

我的FragmentonCreateView

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_home, container, false);
    ButterKnife.bind(this, root);

    mMapView.onCreate(savedInstanceState);

    mMapView.onResume(); // needed to get the map to display immediately

    try {
        MapsInitializer.initialize(getActivity().getApplicationContext());
    } catch (Exception e) {
        e.printStackTrace();
    }

    mMapView.getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(GoogleMap mMap) {
            googleMap = mMap;
            if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                return;
            }
            googleMap.setMyLocationEnabled(true);
            startLocationService();

        }
    });

    return root;
}

所以每次创建fragment时都会调用这个方法——比如场景:

打开应用,调用onCreateView,定位服务启动,放大地图,关闭应用(服务仍在运行并显示通知),点击通知,然后再次调用onCreateView,地图首先缩小。

有没有一种好方法可以“保留”用户位置并防止地图进行整个缩小 -> 等待位置更新 -> 放大?

我希望当用户通过点击通知打开应用程序时,地图已经放大了他的位置。

【问题讨论】:

  • 如何在 sharedprefence 和 onMapReady 中退出应用程序时存储用户位置并设置该位置并添加缩放级别而不为相机设置动画
  • 嘿。通过动画你的意思是这个? CameraPosition cameraPosition = new CameraPosition.Builder().target(currentLatLng).zoom(15).build(); googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));如何在不为相机设置动画的情况下放大?

标签: android google-maps fragment google-maps-android-api-2 android-location


【解决方案1】:

您可以按照以下步骤操作:

1) 使用 SharedPreference 保存了您上次的位置和缩放级别

2) 从 SharedPreference 获取 OnCreateView 方法的旧位置和缩放级别

3) 调用 onMapReady() 回调中的第一条语句而不激活相机:

mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(oldLocation.getLatitude(), oldLocation.getLongitude()), 12(yourzoomlevel)));

【讨论】:

    【解决方案2】:

    我有同样的问题,我通过关注修复了几乎 90%

    1. 使用融合位置
    2. 在共享偏好中保存位置
    3. 第一次找到位置时从位置服务广播,因此地图的摄像头会立即移动到该位置
    4. 从相机放大中移除动画

    使用此代码移动相机

     CameraUpdate center=
            CameraUpdateFactory.newLatLng(new LatLng(40.76793169992044,
                                                     -73.98180484771729));
        CameraUpdate zoom=CameraUpdateFactory.zoomTo(15);
    
        map.moveCamera(center);
        map.animateCamera(zoom);

    【讨论】:

    • 感谢您的回答。 “从相机放大中删除动画”是什么意思?我必须做 CameraPosition cameraPosition = new CameraPosition.Builder().target(currentLatLng).zoom(15).build();至少使用一次变焦,否则相机会很远。你的意思是只做一次吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多