从 Android Wear LG Urbane 2nd Edition 获取位置

Fetching Location from Android Wear LG Urbane 2nd Edition

我正在尝试编写 Wear 应用程序。我发现如果 phone 未通过 Android Wear 应用程序与手表同步(即使手表在 phone 中与 Android wear 应用程序断开连接后仍与 wifi 连接),地图应用程序不获取当前位置。

  1. 当以两种方式作为独立应用程序尝试时,不会获取位置更新。下面是代码。

LocationServices.FusedLocationApi .requestLocationUpdates(mGoogleApiClient,locationRequest,this);

            LocationServices.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,this);

但是上面的代码在移动应用程序中运行得很好。

我正在使用 LG Urbane 第 2 版。

任何人都请帮我解决这个问题.. LG Urbane 第 2 版说它有 GPS 那么为什么当不与 phone 同步时我无法获取位置详细信息。

更新:

我从以下站点发现 Android wear 使用来自 phone 的 GPS 提供商来获取位置更新。只有 Sony Smartwatch 3 可以直接从手表获取位置更新。还是老样子吗?

http://www.computerworld.com/article/2919013/android/android-wear-on-wi-fi-using-a-smartwatch-without-a-phone-nearby.html

http://android-developers.blogspot.com.au/2014/10/gps-on-android-wear-devices.html

您确定手表接收到 GPS 信号吗?用app测试一下,或者有些手表可以在Dev options里测试gps,比如sw3。

更新:LG Urbane 第 2 版似乎有 GPS,即使它没有列在他们的 official site 中。也请忽略该页面上声称没有的评论。

如果机载有 GPS 芯片,Wear 将使用它。不仅仅是索尼设备的情况。

关于 FusedLocationProvider,如果你 运行 它在 Wear 应用程序上,它会尝试从 phone b/c 获取位置,它在电池方面更好其他事情。

如果 Wear 设备与 Phone 断开连接,则会切换到手表上的 GPS(如果有的话)。重要的是,仅在 Wear 设备上时,GPS 在室内不起作用,因此您可能需要到室外。此外,首次在 Wear 设备上使用 GPS 时,get/update 可能需要一些时间才能找到卫星位置。

如果不是,它只是 returns 您连接到 phone 时最后已知的 lat/long 位置。

FusedLocationProvider 涉及的代码比我们在您的代码段中看到的要多得多。

如果您想使用 Location(连接和未连接时)查看功能完备的 Wear 应用,请查看 GitHub 上的 Google 示例:SpeedTracker

具体看WearableMainActivity.javaclass。如果您已正确连接到 GoogleApiClient 并且您拥有适当的 运行 位置时间权限,则此代码应该有效(来自 SpeedTracker):

LocationRequest locationRequest = LocationRequest.create()
        .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
        .setInterval(UPDATE_INTERVAL_MS)
        .setFastestInterval(FASTEST_INTERVAL_MS);

LocationServices.FusedLocationApi
        .requestLocationUpdates(mGoogleApiClient, locationRequest, this)
        .setResultCallback(new ResultCallback<Status>() {

            @Override
            public void onResult(Status status) {
                if (status.getStatus().isSuccess()) {
                    if (Log.isLoggable(TAG, Log.DEBUG)) {
                        Log.d(TAG, "Successfully requested location updates");
                    }
                } else {
                    Log.e(TAG,
                            "Failed in requesting location updates, "
                                    + "status code: "
                                    + status.getStatusCode() + ", message: " + status
                                    .getStatusMessage());
                }
            }
        });