21

現在、アプリケーションで MapActivity を使用しています。2 つの API キーで使用します。1 つはデバッグ用、もう 1 つは「本番」用です。

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

4 に答える 4

9

レイアウトにウィジェットを配置し、Java で API キーを設定することはできません。

コンストラクターを介して動的に作成する場合MapView、Java コードからその方法で API キーを提供できますが、レイアウトに動的に追加する必要があります。

そうは言っても、ビルド プロセスを介して問題に対処します (たとえば、デバッグ/プロダクション ビルドに基づいて、適切な XML ファイルを適切なディレクトリにコピーします)。

于 2010-08-19T04:32:23.487 に答える
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);
于 2012-07-31T11:25:05.250 に答える
2

製品フレーバーを使用する必要があります。

例えば:

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"
         }
    }
}
于 2016-10-27T16:22:22.177 に答える
1

Google マップ オブジェクトを動的に作成する必要があります。レイアウトには、オブジェクトを作成するための親レイアウトのみが含まれます。

于 2011-02-20T10:02:19.690 に答える