Android 佩戴位置

Android Wear Location

我正在制作 Android Wear Watch Face,我需要向用户显示当前位置。

我已按照 Dev site 上的教程进行操作,但我无法使用它。代码永远不会转到 "onLocationChanged" listener.

设备为华为手表,手机已连接WiFi和定位

权限已开启(我有运行时权限请求)。这是代码:

AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>

build.gradle (Module.wear)

compile 'com.google.android.gms:play-services-location:8.4.0'

AnalogFaceService.java

googleApiClient = new GoogleApiClient.Builder(AnalogFaceService.this)
  .addApi(LocationServices.API)
  .addApi(Wearable.API)
  .addConnectionCallbacks(this)
  .addOnConnectionFailedListener(this).build();

@Override
public void onConnected(@Nullable Bundle bundle)
{
  LocationRequest locationRequest = LocationRequest.create()
   .setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY)
   .setInterval(TimeUnit.SECONDS.toMillis(2))
   .setFastestInterval(TimeUnit.SECONDS.toMillis(2))
   .setSmallestDisplacement(2);

  if
  (
    (
      ActivityCompat.checkSelfPermission(AnalogFaceService.this, Manifest.permission.ACCESS_FINE_LOCATION) 
      != PackageManager.PERMISSION_GRANTED
     ) && (
      ActivityCompat.checkSelfPermission(AnalogFaceService.this, Manifest.permission.ACCESS_COARSE_LOCATION) 
      != PackageManager.PERMISSION_GRANTED
     )
    ) {
      return;
    }

  LocationServices.FusedLocationApi
   .requestLocationUpdates(googleApiClient, locationRequest, onLocationChangedListener)
   .setResultCallback(locationCallback);
}

private final LocationListener onLocationChangedListener = new LocationListener()
{
  @Override
  public void onLocationChanged(Location location)
  {
    Log.v("LOCATION_TEST", location.getLatitude() + " :::: " + location.getLongitude());
    getSunriseAndSunset(location);

    addLocationEntry(location.getLatitude(), location.getLongitude());
  }
};

你必须打电话给connect

@Override
protected void onResume() {
    super.onResume();
    googleApiClient.connect();
    ...
}

开发站点的代码没有问题。

设备刚恢复出厂设置,我还没有打开 Google 地图,所以手表无法获取当前位置,因此它没有进入 "onLocationChanged".