无法显示谷歌地图

时间:2014-03-05 03:37:30

标签: android google-maps android-mapview

我写了一个显示简单谷歌地图的机器人。一切似乎都很好。当我运行它时,它只显示带有Google徽标的灰色网格,但不显示地图。

这是代码

       package com.example.myroute;

      import com.google.android.maps.MapView.LayoutParams;  
      import android.view.View;
      import android.widget.LinearLayout;
      import com.google.android.maps.MapActivity;
      import com.google.android.maps.MapView;
      import android.os.Bundle;
      import com.google.android.maps.GeoPoint;
      import com.google.android.maps.MapController;




   public class MapsActivity extends MapActivity 
     {    

MapView mapView;
MapController mc;
GeoPoint p;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    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);


    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); 
    mapView.invalidate();
    mapView.setStreetView(true);
}

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

这是清单文件

 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.myroute"
  android:versionCode="1"
  android:versionName="1.0.0">

<uses-sdk
    android:minSdkVersion="7"
    android:targetSdkVersion="19" />

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
 <permission
      android:name="com.example.myroute.permission.MAPS_RECEIVE"
      android:protectionLevel="signature"/>
    <uses-permission android:name="com.example.myroute.permission.MAPS_RECEIVE"/>

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

    <uses-feature
          android:glEsVersion="0x00020000"
          android:required="true"/>
<application 
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name">

<uses-library android:name="com.google.android.maps" />  

    <activity android:name="com.example.myroute.MapsActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>


</application>

</manifest>

这是Main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
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:enabled="true"
     android:apiKey="AIzaSyABftaHTCmU-ooh7XH4LMBxLLcFEj5mY_8"
    android:clickable="true"

    />
<LinearLayout android:id="@+id/zoom"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    /> 

</RelativeLayout>

4 个答案:

答案 0 :(得分:2)

通常灰色网格表示您的API密钥存在问题。当您使用调试证书生成API密钥时,我建议您使用来自sdk的Keytool创建一个新的签名密钥。

Original source

  

enter image description here

答案 1 :(得分:2)

您遇到问题的原因是您正在使用Google Maps API V1的实施,可能使用key生成的API Console Google Maps API V2

我看到了这一点,因为您使用的是GeoPoints等对象,它在API V2中成为LatLng点,而MapController则未在API V2中使用。

由于Google Maps API V1已不再支持超过一年,我建议您将xml布局和Java代码更改为Google Maps API V2代码。

为了帮助您入门,我在写一篇关于在您的应用程序中集成Google Maps API V2的博客文章:

Google Maps API V2 Guide

如果您没有以正确的方式生成密钥,我建议您仔细阅读本指南,并确保您已完成所有步骤:

Google Maps API V2 Key

答案 2 :(得分:1)

在清单文件中,在应用标记中添加google Api Key,如下所示:

 <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="your api key value" />

答案 3 :(得分:0)

MapView的{​​p> android v2v1不同。所以,而不是

public class MapsActivity extends MapActivity
你应该使用

public class MapsActivity extends Activity

public class MapsActivity extends Fragment

并且对于API-KEY,您必须在manifestapplication tag内声明它,并且还要提及google_play_service中未使用的xml file版本,请删除此android:apiKey="AIzaSyABftaHTCmU-ooh7XH4LMBxLLcFEj5mY_8" 1}}来自xml并在manifest

中添加
<meta-data
      android:name="com.google.android.gms.version"
      android:value="@integer/google_play_services_version" />
<meta-data
      android:name="com.google.android.maps.v2.API_KEY"
      android:value="your api key value" />

从我的观点来看,最好使用MapFragment代替MapView Tutorial for How to use Mapview和MapFragment Tutorial for How to use MapFragment

使用MapView

的代码段
public class MapFragment extends Fragment {

    MapView m;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
            Bundle savedInstanceState) {
        // inflat and return the layout
        View v = inflater.inflate(R.layout.map_fragment, container, false);
        m = (MapView) v.findViewById(R.id.mapView);
        m.onCreate(savedInstanceState);

        return v;
    }

    @Override
    public void onResume() {
        super.onResume();
        m.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        m.onPause();
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        m.onDestroy();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        m.onLowMemory();
    }
}

xml文件

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.gms.maps.MapView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/mapView" />
  

android:minSdkVersion =“7”应该是android:minSdkVersion =“8”你可以   谷歌为什么?通过这样做,如果你没有看到地图然后有   API-KEY的一些问题确保您使用了计算机的SHA-1   指纹; com.example.myroute为你的地图生成API-KEY。如果是你的话   谷歌播放服务的版本不匹配你也看不到地图。