2010-08-19 28 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" 
     } 
    } 
}