【问题标题】:android api with google map displays grid带有谷歌地图的android api显示网格
【发布时间】:2013-04-01 06:02:55
【问题描述】:

我正在创建一个使用 google maps api v2 的 android 应用程序。 我相信我已经按照谷歌教程所做的一切,但我仍然只得到谷歌地图网格(没有地图)。我使用 keystore.debug 的 SHA1 创建了一个调试密钥。

以下是我的设置: Eclipse java编译器1.7版 项目java编译器1.6版

应用程序清单:

<manifest ...>
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="my.app.test.permission.MAPS_RECEIVE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>

    <application>
        <activity>
        ...
        </activity>
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="xxxxxxxxxxxxxxxxxxxxxxxxxx"/>

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

</manifest>

地图xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/BackGroundColor"
    android:orientation="vertical"
    tools:context=".test" >

     <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingRight="10dp"
        android:paddingTop="5dp" >

        <com.google.android.maps.MapView
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/mapview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:clickable="true"
            android:apiKey="xxxxxxxxxxxxxxxxxxxxxxxxxx" >
        </com.google.android.maps.MapView>

    </LinearLayout>
</LinearLayout>

地图活动:

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


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.activity_map);

    mapView = (MapView) findViewById(R.id.mapview); 
                mapView.setBuiltInZoomControls(true); 
                mapView.setStreetView(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();
}

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

}

我知道有很多帖子都有同样的问题。我都读完了!!! 我已经创建了几次密钥,但仍然是一样的...... 任何想法有什么问题,我只看到网格?该应用程序对 AVD 以及具有 android 版本 2.2.1 的三星手机具有相同的结果

【问题讨论】:

  • 您确实生成了错误的密钥这是导致此问题的主要原因,您需要按照所有步骤从头开始重新生成密钥。
  • 我以多种不同的方式多次生成了密钥。我还安装了 jdk 1.6 以便从该版本创建密钥,因为我已经阅读了一些与此相关的帖子。密钥生成可能出了什么问题?
  • 我也尝试创建自己的证书,从该证书的 sha1 创建一个新密钥并签署/导出 apk。然后我将应用程序安装到我的安卓手机上。我仍然得到一张只有网格和缩放面板的空地图。因此,我倾向于相信代码有问题......有什么想法吗?

标签: android google-maps


【解决方案1】:

如果您为 API V2 编写应用程序,那么您使用了错误的对象,您需要修复几件事:

1. 删除:

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

这是 Google Map API V1 的权限。

2.你必须添加这2个权限:

<permission android:name="your.application.package.permission.MAPS_RECEIVE"    android:protectionLevel="signature"/>
<uses-permission android:name="your.application.package.permission.MAPS_RECEIVE"/>

更改:your.application.package 为您当前的应用程序包。

3. 当您以SDK v8 为目标时,您必须为您的应用程序添加片段支持才能使用来自Google Map API V2 的SupportMapFragment,因此您需要添加google-support-v4并将您的地图对象更改为SupportMapFragment

4.您的MapActivity 必须更改为FragmentActivity

5.您可以在我写的关于如何将 Google Map API V2 添加到您的项目的博文中获得有关如何进行这些更改的更多信息:

Google Maps API V2

【讨论】:

  • 你能告诉我如何像使用 mapview 一样操作片段吗?我想将地图聚焦在特定位置并添加标记。
  • 请创建一个新问题,我会帮助你。
  • 那不是很好,你现在做了什么。我没有在这里帮助你?
【解决方案2】:

您的问题与模拟器有关,您需要安装到APK。 我遇到了类似的问题,所以我准备了分步教程来展示如何在模拟器(android 4.2.2)上使用谷歌地图 android v2 看看我的博客:http://umut.tekguc.info/en/content/google-android-map-v2-step-step

【讨论】:

  • 虽然我的问题已经得到解答,但感谢您的教程。挺好的。
【解决方案3】:

您需要从 java keytool 而不是 SHA1 生成 MD5 指纹。 检查此帖子以生成 MD5 指纹: How can I get the MD5 fingerprint from Java's keytool, not only SHA-1?

【讨论】:

  • api v1 需要 MD5 而不是 api v2。我试过了,谷歌控制台 api 返回错误。
猜你喜欢
  • 1970-01-01
  • 2014-09-23
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多