Android Location Manager в Сервисе - PullRequest
       8

Android Location Manager в Сервисе

1 голос
/ 20 сентября 2019

Я попытался создать IntentService, но потом я прочитал об этом в Интернете, что вместо этого я должен использовать Сервис.Я на самом деле не знаю, что я делаю неправильно в коде.Может кто-нибудь объяснить мне немного?

Я пытаюсь создать простой Сервис, который считывает широту и долготу, даже если приложение удаляется с экрана, и, наконец, отправляет их в мой пользовательский API.Похоже, что сбой приложения в Location Manager в GPSTracker.java

GPSTracker.java

package YOU.SOLD.YOUR.SOUL;

import android.annotation.SuppressLint;
import android.app.Service;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;

import androidx.annotation.Nullable;

public class GPSTracker extends Service implements LocationListener {

    LocationManager LM;

    @SuppressLint("MissingPermission")
    @Override
    public void onCreate() {
        LM.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 1, this);
    }

    @Override
    public void onDestroy() {

    }

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

    @Override
    public void onLocationChanged(Location location) {

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }
}

MainActivity.java

package YOU.SOLD.YOUR.SOUL;

import android.Manifest;
import android.content.Intent;
import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

public class MainActivity extends AppCompatActivity {

    private static final int PERMISSION_1 = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_1);
        Intent intent = new Intent(this, GPSTracker.class);
        startService(intent);
    }
}

Разрешения, добавленные в манифест, - это COARSE иПрекрасное местоположение.Также служба была добавлена ​​как .GPSTracker

java.lang.RuntimeException: Невозможно создать службу YOU.SOLD.YOUR.SOUL.GPSTracker: java.lang.NullPointerException: Попытка вызвать виртуальный метод voidandroid.location.LocationManager.requestLocationUpdates (java.lang.String, long, float, android.location.LocationListener) 'для нулевой ссылки на объект

и

Причинаby: java.lang.NullPointerException: Попытка вызвать виртуальный метод void android.location.LocationManager.requestLocationUpdates (java.lang.String, long, float, android.location.LocationListener) 'для нулевого объекта, ссылка

1 Ответ

0 голосов
/ 20 сентября 2019

Чтобы исправить исключение NullPointerException, просто инициализируйте ссылку LocationManager.Кроме того, переместите логику для запроса обновлений местоположения в переопределение метода onStartCommand() и верните START_STICKY для автоматического перезапуска службы.

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
        LocationManager locationManager =
        (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 1, this);
    }

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