当前位置: 首页 > 面试题库 >

支持两个Google Map API(V1和V2)的最佳方法是什么?

万知
2023-03-14
问题内容

在我的应用程序中同时支持两个android map api的最佳方法是什么?

Google 发行了android google map api v2,v1
仍然存在(并且对于较旧的手机效果更好)。

到目前为止,我看到了两个场景。

1)两个apk:每个api一个apk

我可以使用中提供的多个apk功能google play

  • 我该如何区分google play?对opengl的支持?

这种情况意味着每次我要构建项目时,都必须复制/粘贴一些文件,更新其他文件,这可能很麻烦。

除非我使用量身定制的构建过程(使用ant或maven)。

  • 有什么建议吗?

2)一

可以使用if/else语句来实现这一点,在manifest文件中包括 两个 api 的声明。

  • 有人尝试过吗?

注意:Google会针对较旧的手机进行映射

首先,新的v2 api基于矢量,在CPU / GPU上较重(v1 api使用位图图块)。

其次,新的v2 API需要opengl 2.0。据说所有运行的Android设备froyo或更高版本都支持该功能。
不幸的是,事实并非如此。

例如,google play / markets无法识别出一种古老的HTC魔术运行姜饼(在自定义rom上)以支持opengl 2.0。

也许还有更多…


问题答案:

可以使用if / else语句(在清单文件中包括两个api的声明)来实现这一目的。

好吧,清单中不能包含“ if / else语句”。

从我的角度来看,基本上有三种方案:

  1. 设备没有OpenGL ES 2.0或更高版本
  2. 该设备确实具有OpenGL ES 2.0或更高版本,但目前没有Google Play服务(可能是因为它没有Play商店)
  3. 该设备具有OpenGL ES 2.0或更高版本,并具有Google Play服务

正如您在对另一个答案的评论中所指出的那样,我的方案#1无法与其他两个方案共存,仅仅是因为您 必须 具有<uses-feature>调用OpenGL
ES 2.0 的元素。而且,由于Play商店不支持基于OpenGL ES
API级别的多个APK文件,因此对于同一Play商店列表,您无法同时支持方案1和其他两个方案。您必须在Play商店中拥有两个完全独立的应用程序:一个仅使用可在所有Android设备上运行的Maps
V1,另一个使用Maps V2(在我的方案#2中使用Maps V1)在OpenGL ES 2.0+设备上运行。

另外,请记住,在2013年3月3日之后,将不再提供Maps V1
API密钥。在那之后进行Maps V1开发会变得越来越危险,因为如果开发环境出现问题,您将无法获取新的API密钥。

基本上,这意味着与以前相比,依赖Google Maps开发应用程序的方式新颖有趣。即使您说要彻底放弃Maps
V1,也存在属于我的方案2的设备。希望不会有很多,尽管肯定有一些(例如,靠近我的HTC EVO 3G)。不应有运行Android 3.0及更高版本的设备-
我很确定OpenGL ES 2.0是Android 3.0的硬性要求,并且Play商店应该在所有这些设备上(因此, Google
Play服务应可用于所有服务)。

坦白说,对于某些开发人员来说,最好的答案是完全放弃Google的地图,并使用OpenStreetMap或其他具有更高稳定性的东西(如果他们想支持Android
1.x / 2.x设备)。



 类似资料:
  • 问题内容: 我们有两个PHP5对象,并希望将其中一个的内容合并到第二个中。它们之间没有子类的概念,因此以下主题中描述的解决方案不适用。 备注: 这些是对象,而不是类。 对象包含很多字段,所以 foreach 会很慢。 到目前为止,我们考虑将对象A和B转换为数组,然后在重新转换为对象之前使用 array_merge() 合并它们,但是我们不能为此感到骄傲。 问题答案: 如果您的对象仅包含字段(没有方

  • 问题内容: 处理浏览器不支持HTML5 标签的情况的标准方法是嵌入一些后备内容,例如: 但是页面的其余部分保持不变,这可能是不合适的或令人误解的。我想要一种检测画布不受支持的方法,以便可以相应地显示页面的其余部分。你会推荐什么? 问题答案: 这是Modernizr以及基本上所有其他执行画布工作的库中使用的技术: 由于您的问题是在 不 支持的情况下用于检测,因此我建议像这样使用它:

  • 问题内容: 我到处环顾了很多,还没有找到将现有IntelliJ项目转换为Gradle的最佳解决方案。我在团队环境中工作,我们目前共享.ipr文件,因为我们要跟踪一些构建配置。最终,我们将摆脱那些偏爱Gradle的人,但是在Gradle转换完成之前,我不能搞砸太多。 同样,我们的Java源文件位于src目录的根目录中,而不是标准的src / main / java。 有什么方法可以将Gradle添加

  • 问题内容: 所以我有一个JSON文件,该文件被解析为Javascript中的对象。我知道你在想什么:幸运的家伙。JSON本质上是一棵大树形式的流程图。这只是我要实现的目标的一个小示例: 因此,在此示例中,我将深入研究第二个分支(在其中显示),并且希望能够跳转到包含的分支。记住这是JSON,因此它必须是一个字符串(除非有本地链接?!在那儿?),但我不知道如何最好地格式化它。 如我所见,我至少有两个选

  • 问题内容: 是什么使应用程序功能的模块/服务/位成为OSGi模块的特别好的候选者? 我对在我的应用程序中使用OSGi感兴趣。我们是一家Java商店,我们广泛使用Spring,因此我倾向于将Spring动态模块用于OSGi(tm)服务平台。我正在寻找一种将OSGi一点点集成到应用程序中作为试用的好方法。这里有人使用过此技术或类似的OSGi技术吗?有陷阱吗? @Nicolas-谢谢,我已经看过那个了。

  • 问题内容: 我有一个方法可以执行一些超时任务。我使用ExecutorServer.submit()获取Future对象,然后使用超时调用future.get()。这工作正常,但是我的问题是处理可能由我的任务引发的检查异常的最佳方法。以下代码可以正常工作,并保留检查的异常,但是如果方法签名中的检查的异常列表发生更改,则显得非常笨拙且容易中断。 对于如何解决这个问题,有任何的建议吗?我需要以Java