【问题标题】:How to run map application with out using "com.google.android.maps" in manifest如何在清单中不使用“com.google.android.maps”的情况下运行地图应用程序
【发布时间】:2012-04-12 11:22:31
【问题描述】:

我已经开发了地图应用程序。 在清单XML 我添加了<uses-library android:name="com.google.android.maps" /> 有了它,它在移动设备和模拟器中运行良好。

但在 kindle fire 设备中它无法正常工作,当我从清单中删除 <uses-library android:name="com.google.android.maps" /> 时,它在 kindle fire 中工作正常。

有没有办法通过从清单文件中删除<uses-library android:name="com.google.android.maps" /> 来使用谷歌地图。

如何使用这个库引用而不用在清单 XML 中编写。

【问题讨论】:

标签: android google-maps kindle-fire


【解决方案1】:

uses-library 上有一个未充分使用的 required 属性。

uses-library documentation

因此:

    <uses-library
        android:name="com.google.android.maps"
        android:required="false" />

如果您将此设置为 false,您的应用将在 Kindle Fire 上正常安装,但地图 API 调用仍然会失败,因为实际上地图库并不存在。为了解决这个问题,您需要保护您的代码在 API 不存在时不调用它。我自己使用这样的代码:

    protected boolean mapsAvailable() {
            try {
                    Class.forName("com.google.android.maps.MapView");

                    return true;
            } catch (ClassNotFoundException exception) {
                    return false;
            }
    }

如果 mapsAvailable 返回 false,则不要使用 MapView 进行任何活动,不要调用任何 Maps API 类等。

【讨论】:

    【解决方案2】:

    只需输入此代码

    String geoAddress  = "geo:" + ll[0] + ","+ ll[1] + "?z=15";
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(geoAddress));
                    context.startActivity(intent);
    

    并在清单中添加权限

    【讨论】:

      【解决方案3】:

      要使用 Maps API,您必须提供对其库的引用,否则将引发 NoClassDefFoundError 异常。阅读this

      【讨论】:

      • 你不能!因为如果不将库引用到您的项目,就无法使用它。 没有参考!没有糖果! :)
      • 不过,我不这么认为,因为根据您的 Maps API 文档,它的 AndroidManifest.xml 想知道它的参考,而不是您的项目。这就像在你的应用中使用互联网权限来使用网络访问一样,如果你不允许,你就不能使用它......
      • Kindle Fire 不附带 Google API,无法在这些设备上引用或包含库。
      • 在这一点上,你运气不好。阅读此stackoverflow.com/a/8583906/966550
      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 2014-03-07
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      相关资源
      最近更新 更多