MapActivity:以编程方式设置 APIKey
我目前在我的应用程序中使用 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)
非常感谢您的帮助。
I currently use a MapActivity in my application.
I use it with 2 API Keys. One for debugging, and one for "production"
I am fed up with changing these values in the xml layout:
<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" />
I am fed up trying to change the apikey each time and replace prod by debug each time.
Is that possible to change this key within the onCreate() of my application.
Imagine that I have a boolean preference that look like: isDebug.
I may check thi preference on my phone and disable it by default on user application. and make something like:
if (isDebug)
myMap.setApiKey(R.string.api_key_debug)
else
myMap.setApiKey(R.string.api_key_prod)
Thank a lot for any help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您不能既在布局中包含小部件,又在 Java 中设置 API 密钥。
如果您通过其构造函数动态创建 MapView,则可以通过 Java 代码以这种方式提供 API 密钥,但随后您需要将其动态添加到您的布局中。
话虽这么说,我会通过您的构建过程来处理问题(例如,基于调试/生产构建,将正确的 XML 文件复制到正确的目录中)。
You cannot both have the widget in your layout and set the API key in Java.
If you dynamically create the
MapView
via its constructor, you can supply the API key that way from Java code, but then you will need to dynamically add it to your layout.That being said, I'd deal with the problem via your build process (e.g., based on debug/production build, copy the right XML file into the right directory).
这对我有用。
MapView 构造函数的这种变体记录在此处:
https://developers.google.com/maps /documentation/android/reference/com/google/android/maps/MapView
This works for me.
This variant of MapView constructor is documented here:
https://developers.google.com/maps/documentation/android/reference/com/google/android/maps/MapView
您应该使用产品风味< /strong>。
例如:
You should use Product Flavors.
For example:
您必须动态创建谷歌地图对象。您的布局将仅包含用于创建对象的父布局。
You have to create google maps object dynamically. Your layout will contaion only parent layout for creating object.
为了获得额外的安全性,请将您的 API 密钥和机密放入
local.properties
文件中,并使用BuildConfig
访问它,如下所示:在您的顶级
设置中。 gradle
文件,在pluginManagement
块下包含 Gradle 插件门户、Google Maven 存储库和 Maven 中央存储库。pluginManagement
块必须出现在脚本中任何其他语句之前。在 Android Studio 中,打开项目级
build.gradle
文件并将以下代码添加到 buildscript 下的依赖项元素中:打开模块级
build.gradle
文件并将以下代码添加到plugins
元素中。保存文件并将您的项目与 Gradle 同步。
打开项目级别目录中的
local.properties
,然后添加以下代码。将YOUR_API_KEY
替换为您的 API 密钥。保存文件。
访问
AndroidManifest.xml
文件中的密钥:在
AndroidManifest.xml
文件中,转到com.google.android.geo.API_KEY
并使用MAPS_API_KEY
更新 android:value 属性,如下所示:访问 Java/Kotlin 代码中的密钥:只需使用
BuildConfig
,如下所示:<前><代码> BuildConfig.MAPS_API_KEY
更多内容可以在 文档。
For extra security put your API key and secrets in the
local.properties
file and access it usingBuildConfig
as follows:In your top-level
settings.gradle
file, include the Gradle plugin portal, Google Maven repository, and Maven central repository under thepluginManagement
block. ThepluginManagement
block must appear before any other statements in the script.In Android Studio, open your project-level
build.gradle
file and add the following code to the dependencies element under buildscript:Open your module-level
build.gradle
file and add the following code to theplugins
element.Save the file and sync your project with Gradle.
Open the
local.properties
in your project level directory, and then add the following code. ReplaceYOUR_API_KEY
with your API key.Save the file.
Access the key within
AndroidManifest.xml
file:In your
AndroidManifest.xml
file, go tocom.google.android.geo.API_KEY
and update the android:value attribute withMAPS_API_KEY
as follows:Access the key within Java/Kotlin code: Just use
BuildConfig
as follows:More can be found in docs.