首页 > 解决方案 > Google Maps Android SDK - OnIndoorStateChangeListener 问题

问题描述

我正在显示一张地图,它会放大到特定的建筑物。我希望能够访问建筑物楼层和当前选定的楼层。

但是,下面的代码不起作用,我似乎误解了 GoogleMap.OnIndoorStateChangeListener 的意思

public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback, GoogleMap.OnIndoorStateChangeListener{

    private GoogleMap mMap;

    @Override
    public void onIndoorBuildingFocused(){
        IndoorBuilding indoorBuilding = mMap.getFocusedBuilding();
        List<IndoorLevel> levels = indoorBuilding.getLevels();
        for (IndoorLevel indoorLevel : levels) {
            System.out.println(indoorLevel);
        }
    }

    @Override
    public void onIndoorLevelActivated(IndoorBuilding indoorBuilding) {
        List<IndoorLevel> levels = indoorBuilding.getLevels();
        for (IndoorLevel indoorLevel : levels) {
            System.out.println(indoorLevel);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        LatLng Location = new LatLng(51.501390, -2.548590);
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(Location, 18));

    }

}

例如,当默认 Google 楼层选择器中的选择发生更改时,我将如何正确返回建筑物楼层和当前楼层?

谢谢

标签: androidgoogle-maps

解决方案


您可以使用getActiveLevelIndex()公共方法下的onIndoorLevelActivated(IndoorBuilding building)

这是一个示例代码片段:

googleMap.setOnIndoorStateChangeListener(new GoogleMap.OnIndoorStateChangeListener() {
        @Override
        public void onIndoorBuildingFocused() {

        }

        @Override
        public void onIndoorLevelActivated(IndoorBuilding indoorBuilding) {
                List<IndoorLevel> levels = indoorBuilding.getLevels();
                int level = indoorBuilding.getActiveLevelIndex();
                Log.d("Tag", "Level Index: " + String.valueOf(level));
                String currentFloor = levels.get(level).getName();
                Log.d("Tag", "Level: " + currentFloor);
        }
    });

注意:索引(0)对应于最高楼层。因此,如果建筑物有 5 个楼层,则第 5 个楼层的索引为 0。


推荐阅读