2010-11-08 332 views
0

實景地圖我都映射爲m的Android應用,但它不能很好地工作。我花了最後兩個小時一行一行地看代碼,但我不知道是什麼問題。我在教程http://mobiforge.com/developing/story/using-google-maps-android中完成了所有操作。我在清單中使用谷歌地圖。地圖顯示標誌,不顯示地圖(而不是背景網格線),幾秒鐘後縮放控件消失,不再回來。什麼可能是一個問題? alt text地圖顯示的標記,但不顯示在後臺

這是活動類。

package com.roomate.www; 
import java.util.List; 

import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapActivity; 
import com.google.android.maps.MapController; 
import com.google.android.maps.MapView; 
import com.google.android.maps.MapView.LayoutParams; 
import com.google.android.maps.Overlay; 

import android.view.View; 
import android.widget.LinearLayout; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Point; 
import android.os.Bundle; 
import android.util.Log; 

public class Location extends MapActivity{ 
MapView mapView; 
    MapController mc; 
    GeoPoint p; 

    class MapOverlay extends com.google.android.maps.Overlay 
    { 
     @Override 
     public boolean draw(Canvas canvas, MapView mapView, 
     boolean shadow, long when) 
     { 
      super.draw(canvas, mapView, shadow);     

      //---translate the GeoPoint to screen pixels--- 
      Point screenPts = new Point(); 
      mapView.getProjection().toPixels(p, screenPts); 

      //---add the marker--- 
      Bitmap bmp = BitmapFactory.decodeResource(
       getResources(), R.drawable.marker);    
      canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);   
      return true; 
     } 
    } 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.map_result); 

    mapView = (MapView) findViewById(R.id.mapView); 
    mapView.setStreetView(true); 
     LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom); 
     View zoomView = mapView.getZoomControls(); 

     zoomLayout.addView(zoomView, 
      new LinearLayout.LayoutParams(
       LayoutParams.WRAP_CONTENT, 
       LayoutParams.WRAP_CONTENT)); 
     mapView.displayZoomControls(true); 

     mc = mapView.getController(); 
     String coordinates[] = {"1.352566007", "103.78921587"}; 
     double lat = Double.parseDouble(coordinates[0]); 
     double lng = Double.parseDouble(coordinates[1]); 

     p = new GeoPoint(
      (int) (lat * 1E6), 
      (int) (lng * 1E6)); 

     mc.animateTo(p); 
     mc.setZoom(17); 
     MapOverlay mapOverlay = new MapOverlay(); 
     List<Overlay> listOfOverlays = mapView.getOverlays(); 
     listOfOverlays.clear(); 
     listOfOverlays.add(mapOverlay);   

     mapView.invalidate(); 

} 
@Override 
    protected boolean isRouteDisplayed() { 
     return false; 
    } 
} 

這是地圖的佈局。

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    > 
    <LinearLayout 
    android:layout_gravity="left" 
    android:gravity="left" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    <ImageButton 
    android:id="@+id/imbReturnMap" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:fitsSystemWindows="true" 
    android:src="@drawable/close" 
    android:layout_gravity="left"> 
    </ImageButton> 
    </LinearLayout> 

    <LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="right" 
    android:layout_gravity="right"> 
    <ImageButton 
    android:id="@+id/imbCloseM" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:fitsSystemWindows="true" 
    android:src="@drawable/close" 
    android:layout_gravity="right"> 
    </ImageButton> 
    </LinearLayout> 

</LinearLayout> 

<RelativeLayout 
    android:id="@+id/mainlayout" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
    <com.google.android.maps.MapView 
     android:id="@+id/mapView" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:apiKey="0WR3Cl0evv0U6G2xH9ZnvEFYbDiSDUu_GRovTUQ" 
       /> 
    <LinearLayout android:id="@+id/zoom" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     /> 

</RelativeLayout> 
</LinearLayout> 

回答

3

由您的屏幕截圖顯示,您的設備或仿真器沒有任何連接。零棒圖標告訴你這一點。

如果這是一個模擬器,它可能無法在啓動時檢測到互聯網,或者您可能按[F8]關閉連接。重新啓動模擬器,如果一切順利,你會得到的模擬信號強度正常的兩間酒吧。

在等待模擬器重新啓動時,還要確認您在清單中保留了INTERNET權限。這對仿真器的互聯網訪問整體沒有影響 - 然而,缺乏的權限也將導致您所看到的行爲。

0

首先,你必須在你的模擬器安裝谷歌API包。

其次Google改變了獲取map api key的過程。

this教程可以解決你的問題

而且在地圖上顯示的標記見this