Подтвердить что ты не робот

MapActivity: программно программировать APIKey

В настоящее время я использую MapActivity в своем приложении. Я использую его с двумя ключами 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" />

Мне надоело пытаться каждый раз менять апикию и каждый раз заменять prod отладкой.

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

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

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

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

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

4b9b3361

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

Вы должны использовать 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"
         }
    }
}