2017-08-11 2 views
1

Je développe une application Android pour une smartwatch qui a été achetée et qui tourne en Chine.Obtenir la localisation GPS dans mon Android Wearable en Chine

Mon but est d'obtenir l'emplacement GPS de l'appareil et de suivre son mouvement, mais je n'arrive pas à trouver comment le faire fonctionner.

Actuellement, je développe des API 21 et j'utilise la bibliothèque suivante de services Google Play, car il est celui utilisé par Wearables en Chine: com.google.android.gms:play-services-wearable:7.8.87

Le code que j'utilise est le suivant:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_on_route); 

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

    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addApi(LocationServices.API) 
      .addApi(Wearable.API) // used for data layer API 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .build(); 

    startTravelTime = System.currentTimeMillis(); 

    if (!hasGps()) { 
     Log.d(TAG, "This hardware doesn't have GPS."); 
    } 
} 

private boolean hasGps() { 
    return getPackageManager().hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS); 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    mGoogleApiClient.connect(); 
    Log.i("Connected!!!", "WERE CONNECTED"); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    if (mGoogleApiClient.isConnected()) { 
     LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 
    } 
    mGoogleApiClient.disconnect(); 
    System.out.println("onstop"); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    if(!mGoogleApiClient.isConnected()) { 
     mGoogleApiClient.connect(); 
    } 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    if (mGoogleApiClient.isConnected()) { 
     LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, OnRouteActivity.this); 
    } 
    mGoogleApiClient.disconnect(); 
} 

@Override 
public void onConnected(Bundle bundle) { 
    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()); 
        } 
       } 
      }); 
} 

@Override 
public void onLocationChanged(Location location){ 

    // Display the latitude and longitude in the UI 
    mTextView = (TextView) findViewById(R.id.location); 
    mTextView.setText("Latitude: " + String.valueOf(location.getLatitude()) + "\nLongitude: " + String.valueOf(location.getLongitude())); 
    Toast.makeText(getBaseContext(), "Latitude: " + String.valueOf(location.getLatitude()) + "\nLongitude: " + String.valueOf(location.getLongitude()), Toast.LENGTH_LONG).show(); 
} 

J'espère que quelqu'un peut me aider :)

Répondre

1

pour connaître l'emplacement de travailler sur les appareils portables chinois, vous devez utiliser le Fused Location Provider API et assurez-vous d'inclure la ligne suivante dans votre fichier build.gradle :

dependencies { 
    ... 
    compile 'com.google.android.gms:play-services-location:10.2.0' 
} 

En plus de ce qui précède, vous devez également ajouter:

dependencies { 
    ... 
    compile 'com.google.android.gms:play-services-wearable:10.2.0' 
} 

Plus de détails se trouvent dans le guide de Google Creating Android Wear Apps for China

+0

Le problème est quand j'utilise cette version de Google Play Services I obtenez l'erreur suivante: _Google Play services périmés. Vous avez besoin de 10298000 mais trouvé 7571430_ Connaissez-vous une version inférieure qui pourrait fonctionner avec ma montre? – cabanapi

+0

J'utilise l'émulateur (une partie de la compilation Canary 9 pour Android Studio 3.0) pour tester mes applications. Jusqu'à présent, je n'ai eu aucun problème. Je ne sais pas si vous pouvez utiliser une version inférieure, mais sur la base de la documentation, ça ne sonne pas comme ça. Peut-être que votre montre doit être considérée comme trop vieille et non supportée? – TofferJ

+0

J'ai pensé à cette possibilité :(Je vais tester mon code avec l'émulateur pour voir si ça marche là-bas et si c'est le cas, le problème sera définitivement la version de la montre. – cabanapi