21

我目前在我的应用程序中使用 MapActivity。我将它与 2 个 API 密钥一起使用。一个用于调试,一个用于“生产”

我受够了在 xml 布局中更改这些值:

 <view class="com.google.android.maps.MapView" 
        android:id="@+id/myGmap" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:enabled="true"
        android:clickable="true"
        android:apiKey="@string/api_key_prod" />

我厌倦了每次都尝试更改 apikey 并每次都通过 debug 替换 prod。

是否可以在我的应用程序的 onCreate() 中更改此键。

想象一下,我有一个布尔偏好,看起来像:isDebug。

我可以在我的手机上检查这个偏好,并在用户应用程序中默认禁用它。并制作类似的东西:

 if (isDebug)
     myMap.setApiKey(R.string.api_key_debug)
 else
     myMap.setApiKey(R.string.api_key_prod)

非常感谢您的帮助。

4

4 回答 4

9

您不能既在布局中拥有小部件,又在 Java 中设置 API 密钥。

如果您MapView通过其构造函数动态创建,您可以从 Java 代码中以这种方式提供 API 密钥,但是您需要将其动态添加到您的布局中。

话虽如此,我将通过您的构建过程来处理问题(例如,基于调试/生产构建,将正确的 XML 文件复制到正确的目录中)。

于 2010-08-19T04:32:23.487 回答
5

这对我有用。

MapView 构造函数的这个变体记录在这里: https ://developers.google.com/maps/documentation/android/reference/com/google/android/maps/MapView

@Override
protected void onCreate(Bundle arg0) {
    super.onCreate(arg0);
    String mapApiKey = <your choice logic here>
    mMapView = new MapView(this, mapApiKey);
    setContentView(mMapView);
于 2012-07-31T11:25:05.250 回答
2

您应该使用Product Flavors

例如:

android {
    ...


    defaultConfig {
        minSdkVersion 8
        versionCode 10
    }


    productFlavors {
        dev {
            resValue "string", "google_maps_api_key", "DEV_API_KEY"
         }

        prod {
            resValue "string", "google_maps_api_key", "PROD_API_KEY"
         }
    }
}
于 2016-10-27T16:22:22.177 回答
1

您必须动态创建谷歌地图对象。您的布局将仅包含用于创建对象的父布局。

于 2011-02-20T10:02:19.690 回答