Skobbler SDK на Android: SKMapSurfaceListener.onAnnotationSelected не вызывается

#android #skmaps

#Android #skmaps

Вопрос:

У меня есть SKMapSurfaceView , на который я установил прослушиватель (через setMapSurfaceListener , передавая SKMapSurfaceListener объект). Когда я нажимаю на аннотацию, которая была добавлена в SKMapSurfaceView via addAnnotation , слушатель получает onSingleTap событие, но нет onAnnotationSelected . Я вижу в журналах Skobbler, что он обнаруживает нажатие на «пользовательский POI», который, как я полагаю, является моей аннотацией (особенно, поскольку идентификатор этого пользовательского POI в их журнале является уникальным идентификатором, который я указал в своей аннотации). Но ни onAnnotationSelected один, ни onCustomPOISelected один не вызывается в моем слушателе. Почему?

Редактировать: вот мой код:

         SKAnnotation annotation = new SKAnnotation();
        annotation.setUniqueID(123456);
        annotation.setLocation(new SKCoordinate(
                13.45457,
                52.51592));
        annotation.setMininumZoomLevel(15);
        annotation.setAnnotationType(SKAnnotation.SK_ANNOTATION_TYPE_MARKER);
        mapView.addAnnotation(annotation);

        mapView.setMapSurfaceListener(new SKMapSurfaceListener() {
            @Override
            public void onSurfaceCreated() {
            }

            @Override
            public void onSingleTap(SKScreenPoint arg0) {
                Log.d("onSingleTap");
            }

            @Override
            public void onScreenOrientationChanged() {
            }

            @Override
            public void onRotateMap() {
            }

            @Override
            public void onPOIClusterSelected(SKPOICluster arg0) {
                Log.d("onPOIClusterSelected");
            }

            @Override
            public void onMapRegionChanged(SKCoordinate arg0) {
            }

            @Override
            public void onMapPOISelected(SKMapPOI arg0) {
                Log.d("onMapPOISelected");
            }

            @Override
            public void onMapActionUp(SKScreenPoint arg0) {
            }

            @Override
            public void onMapActionDown(SKScreenPoint arg0) {
            }

            @Override
            public void onLongPress(SKScreenPoint arg0) {
            }

            @Override
            public void onInternetConnectionNeeded() {
            }

            @Override
            public void onInternationalisationCalled(int arg0) {
            }

            @Override
            public void onDoubleTap(SKScreenPoint arg0) {
                Log.d("onDoubleTap");
                float zoom = mapView.getZoomLevel()   1;
                if (zoom <= SKMapSurfaceView.MINIMUM_ZOOM_LEVEL) {
                    mapView.setZoomSmooth(zoom, 250);
                }
            }

            @Override
            public void onCustomPOISelected(SKMapCustomPOI arg0) {
                Log.d("onCustomPOISelected");
            }

            @Override
            public void onCompassSelected() {
            }

            @Override
            public void onAnnotationSelected(SKAnnotation annotation) {
                Log.d("onAnnotationSelected");
            }

            @Override
            public void onAnimationsFinished() {
            }

            @Override
            public void onActionZoom() {
                Log.d("onActionZoom");
            }

            @Override
            public void onActionPan() {
                Log.d("onActionPan");
            }
        });
  

И затем журналы, которые я получаю, если я делаю одно нажатие где-то НЕ в аннотации, а затем одно нажатие НА аннотацию:

 06-22 19:34:27.674: D/SKMaps(20852): MapRenderer----onSurfaceCreated
06-22 19:34:27.679: D/SKMaps(20852): MapRenderer---- LinInitialized = true 
06-22 19:34:28.394: D/SKMaps(20852): MapRenderer----Map follower mode 0
06-22 19:34:28.394: D/SKMaps(20852): MapRenderer----onSurfaceChanged width = 1080 height= 1701
...
06-22 19:35:11.729: D/SKMaps(20852): SKMapSurfaceView----SINGLE TAP  CONFIRMED 0
06-22 19:35:11.729: D/SKMaps(20852): SKMapSurfaceView----Check north indicator   4 526.0 705.0 296 64 0 64
06-22 19:35:11.729: D/SKMaps(20852): SKMapSurfaceView----notifyWithMapInfo
06-22 19:35:11.759: D/Wanderant(20852): onSingleTap
06-22 19:35:17.399: D/SKMaps(20852): SKMapSurfaceView----SINGLE TAP  CONFIRMED 0
06-22 19:35:17.399: D/SKMaps(20852): SKMapSurfaceView----Check north indicator   4 532.0 720.0 296 64 0 64
06-22 19:35:17.399: D/SKMaps(20852): SKMapSurfaceView----notifyWithMapInfo
06-22 19:35:17.429: D/SKMaps(20852): SKMapSurfaceView---- Tapped custom POI id=123456
06-22 19:35:17.429: D/Wanderant(20852): onSingleTap
  

Как вы можете видеть, в обоих случаях я получаю обратный вызов onSingleTap.
(Я пропустил код инициализации Skobbler maps, но это сделано в соответствии с руководством, и он успешно инициализируется и показывает карту и т. Д.)

Комментарии:

1. Привет, Тодор. Мне понадобится больше информации, чтобы отладить эту проблему. Можете ли вы включить код для одной из аннотаций, к которой вы пытаетесь подключиться, и журнал, который вы получаете в консоли (с указанием места обнаружения касания)?

2. Отредактировал мой исходный пост, чтобы включить код. Спасибо.

Ответ №1:

Проблема, с которой вы столкнулись, была ошибкой, присутствующей в SDK от 19 мая.

Мы протестировали это поведение в следующем обновлении SDK (ETA 30 июня 2014 г.) и теперь onAnnotationSelected каждый раз вызывается корректно. Поэтому, пожалуйста, обновите свой SDK, как только будет доступна новая версия (вы должны получить электронное письмо / новостную рассылку, когда обновление будет доступно)

Комментарии:

1. Привет, я обновил SDK до последней версии, загруженной сегодня (версия 2.1.0), и проблема все еще существует, с точно такими же сообщениями в журнале, за единственным исключением, что после «ПОДТВЕРЖДЕНИЯ ОДНИМ НАЖАТИЕМ» теперь вместо «0» указано «null». Но мой onAnnotationSelected не вызывается. Я все еще получаю вызов только onSingleTap. Есть идеи?

2. Хммм … пожалуйста, свяжитесь dev@skobbler.com поскольку требуется больше исследований и кода.

3. Оказывается, я не очищал старые аннотации, и это были те, которые не работали. С новым SDK (2.1.0) нажатие на аннотации работает, если они являются добавленными в данный момент аннотациями и не остались с предыдущего экрана. Теперь я использую deleteAllAnnotationsAndCustomPOIs(), чтобы очистить все старые перед отображением экрана моей карты. Спасибо за вашу помощь.