代码之家  ›  专栏  ›  技术社区  ›  Waza_Be

MapActivity:以编程方式设置APIKey

  •  21
  • Waza_Be  · 技术社区  · 14 年前

    我当前在应用程序中使用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,每次都要用debug替换prod。

    是否可以在应用程序的onCreate()中更改此键。

    假设我有一个类似于:isDebug的布尔首选项。

    我可以在我的手机上检查这个首选项,并在用户应用程序上默认禁用它。做一些像这样的事情:

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

    非常感谢你的帮助。

    4 回复  |  直到 11 年前
        1
  •  5
  •   pete howard    12 年前

    这对我有用。

    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
  •  9
  •   CommonsWare    14 年前

    不能在布局中同时使用小部件,也不能在Java中设置API键。

    如果动态创建 MapView 通过它的构造函数,您可以从Java代码中以这种方式提供API键,但是您需要动态地将其添加到布局中。

    也就是说,我会通过构建过程来处理这个问题(例如,基于调试/生产构建,将正确的XML文件复制到正确的目录中)。

        3
  •  1
  •   Vadim    13 年前

        4
  •  1
  •   localhost    8 年前

    你应该使用 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"
             }
        }
    }