2010-08-19 48 views
21

我目前在我的应用程序中使用MapActivity。 我使用它与2个API密钥。一个用于调试,一个用于“生产”MapActivity:以编程方式设置APIKey

我厌倦了在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和调试更换刺每一次。

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

想象一下,我有一个布尔首选项,如下所示:isDebug。

我可能会检查我的手机上的优先选择,并在用户应用程序中默认禁用它。并使类似:

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

非常感谢任何帮助。

回答

7

您不能同时在布局中使用该小部件,并在Java中设置API密钥。

如果您通过其构造函数动态创建MapView,则可以通过Java代码提供API密钥,但需要将其动态添加到您的布局。这就是说,我会通过构建过程处理问题(例如,基于调试/生产构建,将正确的XML文件复制到正确的目录中)。

+0

这是可悲的。感谢您的明确答案。 – SteelBytes 2012-09-13 02:52:22

1

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

1

您应该使用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" 
     } 
    } 
}