2010-08-19 4 views
21

J'utilise actuellement une MapActivity dans mon application. Je l'utilise avec 2 clés API. Un pour le débogage, et un pour la « production »MapActivity: set APIKey par programmation

Je suis dégoûté de modifier ces valeurs dans la mise en page 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" /> 

Je suis marre d'essayer de changer le apikey chaque fois et remplacer prod par debug chaque fois.

Est-ce possible de changer cette clé dans onCreate() de mon application. Imaginez que j'ai une préférence booléenne qui ressemble à: isDebug.

Je peux vérifier cette préférence sur mon téléphone et la désactiver par défaut sur l'application utilisateur. et de faire quelque chose comme:

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

Merci beaucoup pour toute aide.

Répondre

7

Vous ne pouvez pas avoir le widget dans votre mise en page et définir la clé API en Java.

Si vous créez dynamiquement le MapView via son constructeur, vous pouvez fournir la clé API de cette façon à partir du code Java, mais vous devrez ensuite l'ajouter dynamiquement à votre mise en page. Cela étant dit, je traiterais le problème via votre processus de construction (par exemple, basé sur la construction de débogage/production, copiez le bon fichier XML dans le bon répertoire).

+0

qui est triste. merci pour la réponse définitive. – SteelBytes

1

Vous devez créer dynamiquement un objet google maps. Votre mise en page ne contaion que la mise en page parente pour la création d'objet.

1

Vous devez utiliser Product Flavors.

Par exemple:

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" 
     } 
    } 
}