Нет доступа к Интернету через некоторое время (5/6 мин) в ForeGroundService, когда приложение закрыто на устройствах XIOMI - PullRequest
0 голосов
/ 22 мая 2019

В основном я делаю отправку обновлений местоположения из службы переднего плана на мой сервер. он отлично работает на устройствах 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;
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...