BitNeBolt
@BitNeBolt

Как правильно запустить сервис в фоне?

Для получения gps координат я решил создать сервис, который по идее должен работать в фоне, при выключенном экране или при свернутом приложении. Вот сервис:
Вот

public class GpsService extends Service {

    private LocationListener listener;
    private LocationManager locationManager;
    private int counter = 0;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        listener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                Intent i = new Intent("location_update");
                i.putExtra("speed", String.valueOf(location.getSpeed()));
                i.putExtra("counter", String.valueOf(counter));
                sendBroadcast(i);

                Toast.makeText(getApplicationContext(), String.valueOf(counter), Toast.LENGTH_SHORT).show();

                counter++;
            }

            @Override
            public void onStatusChanged(String s, int i, Bundle bundle) {

            }

            @Override
            public void onProviderEnabled(String s) {

            }

            @Override
            public void onProviderDisabled(String s) {
            }
        };

        locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);

        //noinspection MissingPermission
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,0.1f, listener);

        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if(locationManager != null){
            //noinspection MissingPermission
            locationManager.removeUpdates(listener);
        }
    }
}



Вот что добавлено в манифест:
Вот

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>

        <service
            android:name=".GpsService"
            android:enabled="true"
            android:foregroundServiceType="location"
            android:exported="true"></service>



Но если закрыть приложение или экран, то не будет увеличиваться счетчик и пропадут сообщения Toast.

При попытке "в лоб" запустить foregroundService, программа вылетала при повторном открытии.

Что я делаю не так?
Но если свернуть программу или за
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
iLLuzor
@iLLuzor
Java, Kotlin, Android Developer
Всё верно, система такие сервисы прибивает.
Читайте документацию https://developer.android.com/training/best-background
Можно запустить foreground service,
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы