首页 > 解决方案 > 使用 HERE API 获取我的位置的问题(Wifi)[更新]

问题描述

我在我的平板电脑上安装了 HERE 测试产品(它是一款旧的 Android 5.1 平板电脑,没有 GPS 或蜂窝数据,只有 Wifi),它(大约)使用 Wifi 给出了我的位置。

所以我试图在我的应用程序中进行相同的编程。

下载了 HERE API,获得了我的应用名称的免费增值许可证,在我的清单中输入以下行:

<meta-data
    android:name="com.here.android.maps.appid"
    android:value="itkC4uIay69MTXXXXXXX" />
<meta-data
    android:name="com.here.android.maps.apptoken"
    android:value="NdT8laoCmRysyh8XXXXXXX" />

在我的构建中包含 HERE-sdk,我的代码编译得很好。

我的 MainActivity.onCreate() 中有代码 [编辑我已添加代码以按照下面的 HERE 支持的建议初始化地图引擎]:

    MapEngine.getInstance().init(this, new OnEngineInitListener() {
        @Override
        public void onEngineInitializationCompleted(Error error) {
            if (error == Error.NONE) {
                Logger.i(Tags.POSITION, "correctly started map engine");
                PositioningManager pm = PositioningManager.getInstance();
                PositioningManager.LocationStatus  ls = pm.getLocationStatus(PositioningManager.LocationMethod.GPS_NETWORK);
                if (ls ==  PositioningManager.LocationStatus.AVAILABLE) {
                    Logger.i(Tags.POSITION, "Positioning is available");
                } else {
                    Logger.w(Tags.POSITION, "Positioning not available right now " + ls.toString());
                }
                pm.start(PositioningManager.LocationMethod.GPS_NETWORK);
            } else {
                Logger.i(Tags.POSITION, "Problem setting up map engine: " + error);
            }
        }
    });

然后我在计时器上每分钟运行一次代码来检查我当前的位置:

        GeoPosition pos = PositioningManager.getInstance().getPosition();
        if (pos == null) {
            Log.w("Positioning", "GeoPosition is Null");
        } else {
            GeoCoordinate coord = pos.getCoordinate();
            Logger.i("Positioning", "Location: Latitude = " + coord.getLatitude() + ", Longitude = " + coord.getLongitude());
            Logger.i("Positioning", "Accuracy = " + pos.getLatitudeAccuracy() + ", " + pos.getLongitudeAccuracy());
        }

当我运行时,我会得到这样的日志:

2019-01-27 11:49:31.960 30112-30112/com.company.app I/: [main] INFO  Positioning: correctly started map engine
2019-01-27 11:49:31.961 30112-30112/com.company.app W: [main] WARN  Positioning: Positioning not available right now OUT_OF_SERVICE

然后,每分钟一次

2019-01-27 11:50:30.850 30112-30343/com.company.app W/: [Timer-2] WARN  Positioning: GeoPosition is Null

在平板电脑的“设置”中,“位置”已打开,但显示“最近没有应用程序请求位置”

日志不包含错误或警告,所有权限都在清单中请求

[编辑] 最糟糕的是我的简单测试应用程序(在下面的评论中提到),在我添加 MapEngine 的初始化后现在可以工作了。要回答 HERE 的问题,我现在真的对使用映射不感兴趣,我只想拉出当前的经度和纬度,以帮助在丢失时找到我的平板电脑。

任何人都知道我做错了什么?

标签: androidhere-api

解决方案


我有几个问题要问,答案将帮助我们了解出了什么问题。

  1. 您想显示地图还是仅使用 PositioningManager?
  2. 如果仅使用 PositionManager,您是否最初初始化 MapEngine?

如果您不使用地图,则必须执行类似的操作,因为PositionManager不会自行初始化MapEngine

ApplicationContext context = new ApplicationContext(getApplicationContext());
MapEngine.getInstance().init(context, new OnEngineInitListener() {

  @Override
  public void onEngineInitializationCompleted(OnEngineInitListener.Error error) {
    if (error == OnEngineInitListener.Error.NONE) {

    } else {

    }
  }
});

更新:github上有另一个测试应用程序可能非常有用,没有使用地图,但使用了位置管理器。希望这可以帮助! https://github.com/heremaps/here-android-sdk-examples/tree/master/speed-limit-watcher


推荐阅读