MapActivity: установить APIKey программно - PullRequest
21 голосов
/ 19 августа 2010

В настоящее время я использую 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 и каждый раз заменять prod на debug.

Возможно ли изменить этот ключ в onCreate () моего приложения.

Представьте, что у меня есть логическое предпочтение, которое выглядит так: isDebug.

Я могу проверить эту настройку на своем телефоне и отключить ее по умолчанию в пользовательском приложении. и сделать что-то вроде:

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

Большое спасибо за любую помощь.

Ответы [ 4 ]

9 голосов
/ 19 августа 2010

Вы не можете одновременно иметь виджет в макете и установить ключ API в Java.

Если вы динамически создаете MapView через его конструктор, вы можете предоставить ключ API таким образом из кода Java,но тогда вам нужно будет динамически добавить его в макет.

При этом я бы решил проблему через ваш процесс сборки (например, на основе отладочной / производственной сборки скопируйте нужный файл XML вправильный каталог).

5 голосов
/ 31 июля 2012

Это работает для меня.

Этот вариант конструктора 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);
1 голос
/ 27 октября 2016

Вы должны использовать Ароматизаторы продукта .

Например:

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"
         }
    }
}
1 голос
/ 20 февраля 2011

Вы должны динамически создавать объекты карт Google. Ваш макет будет связан только с родительским макетом для создания объекта.

...