我正在使用此處的Android SDK API。 我有兩個地圖視圖實例 - 一個具有mapFragment的普通地圖(map_1),另一個具有在android服務(map_2)內運行的OffscreenRenderer。 此處地圖SDK OffscreenRenderer添加地圖路線故障
希望這個方案能提供一些解釋。 當活動用戶創建路線將其發送給所有MyApplication實例,然後以有限的服務,其中:啓動
offscreenMap.addMapObject(route);
在這之後運行完美。但是,當Activity被破壞並重新創建時,在相同的用例中,服務中的相同方法會被調用(我會看到我的路由到達Service實例的日誌),但是不會立即更新offscreenMap。在地圖實際獲得新路線更新之前,可能會發生一些漫長的任意時間。
更有趣的是,如果用戶大量放大活動地圖實例(或旋轉地圖),map_2會立即更新新路線。所以我的問題是 - 這是一個這裏的錯誤還是我的濫用?我能做些什麼來防止這種情況發生?
同樣,它不是android銷燬我的服務或丟失與有界服務的連接的問題,這很好。我可以看到服務方法被調用。
希望有任何建議。
更新時間: 對於解決(感謝大衛·施)正常情況下的問題:告訴地圖實例,它需要進行更新,setZoomLevel(getZoomLevel())方法的幫助。 但是!如果在相同情況下在Roadview導航模式下運行的NavigationManager - 地圖仍然不會更新。
澄清map2實例的一些代碼。當服務啓動:
positionManager = PositioningManager.getInstance();
positionManager.start(PositioningManager.LocationMethod.GPS_NETWORK);
navMngr = NavigationManager.getInstance();
navMngr.setMap(map2);
navMngr.setMapUpdateMode(NavigationManager.MapUpdateMode.ROADVIEW);
navMngr.startTracking();
當路線添加(或改變):
public void addRoute(Route route) {
Log.d(TAG, "addRoute");
MapRoute mainRoute = new MapRoute (route);
if (currentRoute != null) {
map2.removeMapObject(currentRoute);
}
currentRoute = mainRoute;
map2.addMapObject(currentRoute);
map2.setZoomLevel(map2.getZoomLevel());
//navMngr.stop();
navMngr.startNavigation(currentRoute.getRoute());
}
雖然第一次創建活動和存活 - 此代碼的工作。但是當它被破壞並重新創建時,map2只會在map1(在活動時)被用戶縮小後更新。我用NavManager做錯了什麼?
更新2: 得到它。我使用navManager的map1和map2。這是一個錯誤。它可能是一個singletone,應該只用於一個地圖實例。當我重新啓動其捕獲導航管理器到其自己的地圖的活動,然後map2刷新只是偶然。所以我現在刪除了map1上的導航管理器及其工作。此外它相當令人沮喪,我無法使用導航經理都映射=(
您是否在兩個地圖之間使用相同的MapRoute對象?路由對象,因爲你有兩個地圖 –
是的,我選中了,我使用了相同的Route對象,但是爲兩個地圖實例單獨創建了兩個不同的MapRoute對象。僅在map_1上進行了一些操作後,仍然在map_2上繪製MapRoute。還是我需要使用兩個Route對象?我猜不是,因爲它可能不應該有任何連接到地圖視圖..任何其他建議?) –
這應該是好的。系統缺失的內容可能是重新繪製地圖的一個嘗試。嘗試像map.setZoomLevel(map.getZoomLevel());這將是一個無操作,但會觸發重繪。如果這是有效的,那麼這意味着該系統認爲沒有任何變化,這是部分正確的。 –