質問

私は現在、アプリケーションで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を置き換えます。

私のアプリケーションのoncreate()内でこのキーを変更することは可能です。

私は次のように見えるブールの好みを持っていると想像してください:isdebug。

携帯電話でこの好みを確認し、デフォルトでユーザーアプリケーションでそれを無効にすることができます。そして、次のようなものを作ります

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

助けてくれてありがとう。

役に立ちましたか?

解決

これは私のために働きます。

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);

他のヒント

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

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

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

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

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

例えば:

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"
         }
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top