Наше приложение для обновления запроса приложения с помощью LocationClient и IntentService. Местоположение не обновляется вообще, если пользователь отключает Wi-Fi в настройках телефона.
Мы пытались протестировать приложение с PRIORITY_HIGH_ACCURACY и обновлениями местоположения при отключении Wi-Fi.
Такая же проблема, если пользователь перемещается в том месте, где нет доступных сетей Wi-Fi.
Я думаю, что правильное поведение - использование других датчиков телефона (например, GPS) для местоположения обновления, если телефон не может обновить местоположение с помощью Wi-Fi.
Шаги для воспроизведения:
-
Запустите местоположение обновления с ожидающим намерением. С параметрами
LocationRequest request = LocationRequest.create() .setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY) .setInterval(5 * 60 * 1000) .setFastestInterval(60*1000) .setSmallestDisplacement(70);
-
Отключите Wi-Fi в настройках телефона или перейдите по телефону в стране, где нет доступных Wi-Fi сетей.
Протестировано на Android 4.4, 4.3, 4.1, 4.0, 2.3.3. (Nexus7, Nexus4, Samsung GS2, HTC Wildfire и др.)
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;
}
}
Я попытался отправить отчет об ошибке https://code.google.com/p/android/issues/detail?id=63110
Разработчики Android не могут помочь.
Где я могу сообщить об ошибках в службах Google Play?
Является ли это ошибкой в сервисах Google Play?
Что вы можете предложить?
Мы не хотим использовать PRIORITY_HIGH_ACCURACY, потому что он разряжает аккумулятор телефона. Наше приложение отслеживает местоположение телефона, и оно не должно зависеть от настроек Wi-Fi и доступности Wi-Fi сетей.