android - samsung - no puedo actualizar google play services
Google Play Services para Android. La ubicación del cliente no actualiza la ubicación si wifi está desactivado (3)
Nuestra aplicación solicita la ubicación de la actualización con LocationClient e IntentService. La ubicación no se actualiza en absoluto si el usuario deshabilita wifi en la configuración del teléfono.
Intentamos probar la aplicación con PRIORITY_HIGH_ACCURACY y las actualizaciones de ubicación cuando wifi está desactivado.
El mismo problema si el usuario se mueve en el lugar donde no hay redes wifi disponibles.
Creo que el comportamiento correcto es usar otros sensores del teléfono (como GPS) para actualizar la ubicación si el teléfono no puede actualizar la ubicación con wifi.
Pasos para reproducir:
Iniciar la ubicación de la actualización con la intención pendiente. Con parametros
LocationRequest request = LocationRequest.create() .setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY) .setInterval(5 * 60 * 1000) .setFastestInterval(60*1000) .setSmallestDisplacement(70);
Desactive el wifi en la configuración del teléfono o vaya con el teléfono en el país donde no hay redes wifi disponibles.
Probado en Android 4.4, 4.3, 4.1, 4.0, 2.3.3. (Nexus7, Nexus4, Samsung GS2, HTC Wildfire y otros)
public class TrackerService extends IntentService {
private void startUpdateLocation() {
PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(),
0, new Intent(ACTION_LOCATION_UPDATED), 0);
LocationRequest request = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY)
.setInterval(5 * 60 * 1000)
.setFastestInterval(60*1000)
.setSmallestDisplacement(70);
getLocationClient().requestLocationUpdates(request, pendingIntent);
Log.d(Utils.getMethodName(), "Location update started");
}
private LocationClient getLocationClient() {
if (mLocationClient != null && mLocationClient.isConnected()) return mLocationClient;
mLocationClient = new LocationClient(this,
new GooglePlayServicesClient.ConnectionCallbacks() {
@Override
public void onConnected(Bundle bundle) {
Log.d(Utils.getMethodName(), "Location client. Connected");
}
@Override
public void onDisconnected() {
Log.d(Utils.getMethodName(), "Location client. Disconnected");
}
},
new GooglePlayServicesClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
throw new IllegalStateException("Failed connection to location manager " + connectionResult.toString());
}
}
);
mLocationClient.connect();
try {
while (mLocationClient.isConnecting()) {
Thread.sleep(200);
}
} catch (InterruptedException e) {
throw new IllegalStateException("Thread interrupted", e);
}
return mLocationClient;
}
}
Intenté enviar un informe de errores https://code.google.com/p/android/issues/detail?id=63110
Los desarrolladores de Android no pueden ayudar.
¿Dónde puedo informar sobre errores en Google Play Services?
¿Es un error en los servicios de Google Play?
¿Qué trabajo podría ofrecer?
No queremos usar PRIORITY_HIGH_ACCURACY porque agota la batería del teléfono. Nuestra aplicación rastrea la ubicación del teléfono y no debería depender de la configuración de wifi y la disponibilidad de las redes wifi.
Déjame intentar darte una respuesta a esto. Hasta hace unos minutos estaba teniendo el mismo problema y esperaba que hubiera una respuesta aquí.
Voy a describir mi problema y solución:
Problema: no recibí ninguna actualización de ubicación sin una conexión a Internet mientras utilizaba LocationClient de los servicios de Google Play. GPS habilitado.
Mi código era estable y funcionaba con Internet, pero las pruebas de campo fallaron.
Posibles causas principales: 1) LocationClient sucked 2) el cliente de ubicación no recibió ninguna actualización de gps
Solución: Para probar esto, intenté usar la aplicación Google Maps. Se quejó sin conexión a internet, así que le di una. Luego intenté ubicarme, pero apareció una nueva pantalla que decía que tenía que permitir que las "aplicaciones de Google" accedieran a mi ubicación. Dijo que esto no afectaría las aplicaciones de terceros que no sean de Google, lo que resultó ser una completa estupidez. Cuando habilité "solo las aplicaciones de Google" para acceder a mi ubicación, mi propia aplicación de repente entró en acción en segundos. El desarrollo para Android ha estado lleno de estos "momentos de Google".
Encontré solución.
Google cambió la documentación de Location Client. Ahora dice:
public static final int PRIORITY_BALANCED_POWER_ACCURACY
Se utiliza con setPriority (int) para solicitar la precisión del nivel de "bloque".
La precisión del nivel de bloque se considera una precisión de aproximadamente 100 metros. El uso de una precisión aproximada como esta a menudo consume menos energía.
Uso de una precisión aproximada : creo que significa que el Cliente de ubicación no usa el GPS para la ubicación de la actualización si la prioridad es PRIORITY_BALANCED_POWER_ACCURACY.
Por lo tanto, para usar el GPS, debes usar PRIORITY_HIGH_ACCURACY.
Si alguien todavía se pregunta,
La documentación de Google dice:
Si está utilizando NETWORK_PROVIDER y GPS_PROVIDER, debe solicitar solo el permiso ACCESS_FINE_LOCATION, ya que incluye permiso para ambos proveedores. El permiso para ACCESS_COARSE_LOCATION permite el acceso solo a NETWORK_PROVIDER.