我目前在我的应用程序中使用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。
是否可以在我的应用程序的onCreate()中更改此密钥。
想象一下,我有一个布尔首选项,如:isDebug。
我可以检查手机上的首选项,并在用户应用程序上默认禁用它。并做出类似的事情:
if (isDebug)
myMap.setApiKey(R.string.api_key_debug)
else
myMap.setApiKey(R.string.api_key_prod)
非常感谢您的帮助。
答案 0 :(得分:8)
您不能在布局中同时拥有窗口小部件并在Java中设置API密钥。
如果通过其构造函数动态创建MapView
,则可以从Java代码中提供API密钥,但是您需要将其动态添加到布局中。
话虽这么说,我会通过你的构建过程处理这个问题(例如,基于调试/生产构建,将正确的XML文件复制到正确的目录中)。
答案 1 :(得分:5)
这适合我。
这里记录了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 :(得分:1)
您必须动态创建Google地图对象。您的布局将仅包含用于创建对象的父布局。
答案 3 :(得分: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"
}
}
}