2011-04-08 183 views
0

我正在制作一个应用程序,需要显示我用经度和纬度定义的位置。一切都很好,它会在我的应用程序屏幕上打开Goog​​le地图,但地图不会显示出来! 这是我使用的代码...Android,谷歌地图不会显示

public class MapsActivity extends MapActivity { 

MapView mapView; 
MapController mc; 
GeoPoint p; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //vraag custom title bar 
    requestCustomTitle(); 
    setContentView(R.layout.mapsactivity); 
    //Titel dynamisch invullen volgens taalvoorkeuren, roept methode setCustomTitle op 
    setCustomTitle(getResources().getString(R.string.MapsTitel)); 


    showZoom(); 
    locate(getIntent().getStringExtra("kantoorLat"), getIntent().getStringExtra("kantoorLng")); 
    addMarker(); 

} 
/* 
* De methode showZoom zorgt ervoor dat de zoombuttons worden getoond 
*/ 

private void showZoom(){ 
    mapView = (MapView) findViewById(R.id.mapView); 
    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); 
} 

/* 
* De methode locate zorgt ervoor dat de juiste locatie wordt getoond 
*/ 
private void locate(String strlat, String strlng){ 
    mc = mapView.getController(); 
    String coordinates[] = {strlat,strlng}; 
    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); 
    mapView.invalidate(); 
} 

/* 
* De methode addMarker zorgt ervoor dat er een indicator staat op de locatie 
*/ 
private void addMarker(){ 
    MapOverlay mapOverlay = new MapOverlay(); 
    List<Overlay> listOfOverlays = mapView.getOverlays(); 
    listOfOverlays.clear(); 
    listOfOverlays.add(mapOverlay); 
} 

protected boolean isRouteDisplayed(){ 
    return false; 
} 

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); 

     Point screenPts = new Point(); 
     mapView.getProjection().toPixels(p,screenPts); 

     Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.accentindicator); 
     canvas.drawBitmap(bmp, screenPts.x+7, screenPts.y-19, null); 
     return true; 
    } 
} 
+1

,所以你看到的只是电网吧?你有没有指定地图API密钥? – WarrenFaith 2011-04-08 09:54:40

+2

你给了正确的API密钥吗?和'InternetPermissions'到您的应用程序? – 2011-04-08 09:57:07

+0

我在布局XML文件中指定了我的API密钥。我看到了网格,Google的徽标和我的标记。 – Hannelore 2011-04-08 09:57:45

回答

3

MD5键不能在不同的机器上工作。

您需要为您当前使用的SDK生成MD5调试密钥。

生成当前机器的调试密钥,然后重试。

+0

我尝试了一个新的MD5键,但没有奏效。 – Hannelore 2011-04-08 11:32:40

+1

我不得不再次替换debug.keystore,现在我很好,非常感谢! – Hannelore 2011-04-08 11:53:59

+1

嘿我的荣幸.. :) – Harshad 2011-04-08 12:18:55

0

检查以下博客条目列出了m的原因导致这个问题。 http://blog.doityourselfandroid.com/2011/01/18/using-google-maps-in-your-android-app/

除了活动,它也可以是无效的清单,布局或API密钥。

总之

  • Android的SDK需要设置到 支持谷歌地图。
  • 一个MapView 组件需要添加到您的 布局,包含一个有效的谷歌 Maps API密钥
  • 将 负责显示地图 需要从MapActivity
  • 的 适用范围扩大的活动清单需要被 设置与 android.permission.INTERNET对 许可
  • 应用程序清单 需要设置与 com.google.android.maps库

在你的情况,很可能是因为互联网连接(在未经许可的清单中和/或模拟器互联网接入)或无效的API密钥。请记住,API密钥已链接到用于签署APK的证书。

+0

我在本教程后生成了我的API密钥:[link] http://mobiforge.com/developing/story/using-google-maps-android 它已经工作过,但现在它没有。我使用SVN客户端与我的合作伙伴合作。我要求一个新的密钥,但它仍然不起作用。它只显示一个网格,Google徽标,缩放条和我的标记。 – Hannelore 2011-04-08 11:45:56

0

您需要获取钥匙才能在您的应用程序中访问Google地图,获取钥匙后您必须在ue清单文件中添加库,该库将在您获得钥匙时自动安装。

0

我认为它是你的模拟器版本problem.Android sdk 2.2仿真器有时并没有显示确切的位置。尝试运行模拟器2.1。

+0

我的模拟器是Google API级别4 – Hannelore 2011-04-08 11:34:21