MapActivity:プログラムでApikeyを設定します
-
29-09-2019 - |
質問
私は現在、アプリケーションで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"
}
}
}