2

这些是我为 android 生成地图密钥的步骤:

1-) 我执行这个命令:

keytool -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore -storepass android -keypass android

该命令将具有如下输出:

Alias name: androiddebugkey
Creation date: Mar 13, 2013
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Android Debug, O=Android, C=US
Issuer: CN=Android Debug, O=Android, C=US
Serial number: 51401a0b
Valid from: Wed Mar 13 02:17:47 EDT 2013 until: Fri Mar 06 01:17:47 EST 2043
Certificate fingerprints:
     MD5:  XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
     SHA1: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
     Signature algorithm name: SHA1withRSA
     Version: 3

2-) 获得 SHA1 后,我将其复制,然后打开此链接:https ://code.google.com/apis/console/

我设置了这个功能:

在此处输入图像描述

3-) 之后我生成一个新密钥:

where XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX(是上面获得的 SHA1)并且edu.osu.cse5326.busstopapp是我项目的单个包。

在此处输入图像描述

4-) 最后,我复制生成的地图 API 密钥:

在此处输入图像描述

5-) 然后我粘贴到我的一个布局中:

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

                />

6-)我从相应的活动加载地图。

7-) 这是我的 manifest.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="edu.osu.cse5326.busstopapp"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CAMERA" />

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <permission
        android:name="edu.osu.cse5326.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

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

    <application
        android:name="edu.osu.cse5326.busstopapp.AppState"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

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

        <activity
            android:name="edu.osu.cse5326.busstopapp.LoginActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

      Many other activities
    </application>

</manifest>

问题是我只看到灰色区域,没有地图信息。

这是我在尝试运行项目时遇到的异常:

03-13 16:48:28.045: W/System.err(375): IOException processing: 26
03-13 16:48:28.045: W/System.err(375): java.io.IOException: Server returned: 3
03-13 16:48:28.045: W/System.err(375):  at android_maps_conflict_avoidance.com.google.googlenav.map.BaseTileRequest.readResponseData(BaseTileRequest.java:115)
03-13 16:48:28.045: W/System.err(375):  at android_maps_conflict_avoidance.com.google.googlenav.map.MapService$MapTileRequest.readResponseData(MapService.java:1473)
03-13 16:48:28.045: W/System.err(375):  at android_maps_conflict_avoidance.com.google.googlenav.datarequest.DataRequestDispatcher.processDataRequest(DataRequestDispatcher.java:1117)
03-13 16:48:28.055: W/System.err(375):  at android_maps_conflict_avoidance.com.google.googlenav.datarequest.DataRequestDispatcher.serviceRequests(DataRequestDispatcher.java:994)
03-13 16:48:28.055: W/System.err(375):  at android_maps_conflict_avoidance.com.google.googlenav.datarequest.DataRequestDispatcher$DispatcherServer.run(DataRequestDispatcher.java:1702)
03-13 16:48:28.055: W/System.err(375):  at java.lang.Thread.run(Thread.java:1019)
03-13 16:48:28.365: W/System.err(375): IOException processing: 26
03-13 16:48:28.365: W/System.err(375): java.io.IOException: Server returned: 3
03-13 16:48:28.365: W/System.err(375):  at android_maps_conflict_avoidance.com.google.googlenav.map.BaseTileRequest.readResponseData(BaseTileRequest.java:115)
03-13 16:48:28.375: W/System.err(375):  at android_maps_conflict_avoidance.com.google.googlenav.map.MapService$MapTileRequest.readResponseData(MapService.java:1473)

我读了很多书,我认为这是 Map API Key 的问题,但我找不到我做错了什么。

我尝试过但没有奏效的事情:

  1. 删除 debug.keystore 并重新生成。
  2. 我尝试在真正的设备上运行,而不是在模拟器上运行。
  3. 重新生成地图 api 密钥并等待几个小时,看看是否需要时间来工作。
4

2 回答 2

4

我不明白,您在所有设置中都使用了Google Map API V2,包括您从控制台获取的密钥,但您使用的MapViewGoogle Map API V1对象。

您应该将MapFragmentSupportMapFragment对象与android-support-v4库一起使用,具体取决于您为其编写应用程序的 minSDK。

这是我写的关于如何将 Google Map API V2 添加到您的应用程序的博客文章,我想您会发现它很方便:

谷歌地图 API V2

于 2013-03-13T23:24:09.900 回答
1

我搜索了一下,发现了这个问题,这个答案:

使用签名的 API 密钥时,仅当从 Android 市场安装应用程序时才会显示 MapView。因此,从 Eclipse(运行方式、调试方式等)或命令行(adb 安装)安装应用程序不会显示 MapView。请放心,一旦应用程序进入市场 - 您下载它,MapView 就会出现。

这有点奇怪,但我希望它会对你有所帮助。

于 2013-03-13T23:17:24.197 回答