В основном я делаю отправку обновлений местоположения из службы переднего плана на мой сервер. он отлично работает на устройствах Motorola и Lenovo до тех пор, пока выполняется поездка (предположим, UBER). На устройстве Xiomi, когда я закрываю приложение, служба переднего плана все еще работает, и я могу отправить местоположение, обновленное на сервер, но после 5/6 минут я получаю сообщение об ошибке Интернет недоступен.
и если я снова открою приложение, то теперь могу отправить обновление местоположения.
Короче говоря, длинная история: Почему через некоторое время отсутствует доступ к Интернету в службе переднего плана на устройствах XIOMI.
public class LocationService extends Service implements LocationListener, GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener {
private LocationRequest mLocationRequest;
@Override
public void onCreate() {
super.onCreate();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
showNotification();
return START_STICKY;
}
@Override
public void onConnected(@Nullable Bundle bundle) {
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(GSP_INTERVAL_TIME); // Update mLocationGlobal every 30 second
mLocationRequest.setFastestInterval(GSP_INTERVAL_TIME); // Update mLocationGlobal every 30 second
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, mLocationRequest, this);
}
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
@Override
public void onLocationChanged(Location location) {
if (checkConnectivity(this)) {
sendLocationUpdateToServer(location);
} else {
Log.e(TAG, "onLocationChanged: No Internet......" );
}
}
private void showNotification() {
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("some title")
.setTicker("some msg")
.setSmallIcon(R.mipmap.app_icon)
.setOngoing(true)
.setPriority(NotificationCompat.PRIORITY_MAX)
.build();
startForeground(666, notification);
}
private boolean checkConnectivity(Context context) {
ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
return true;
}
return false;
}
}