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)
Большое спасибо за любую помощь.
Ответы
Ответ 1
Это работает для меня.
Этот вариант конструктора 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);
Ответ 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"
}
}
}