LocationCallBack не вызывается для службы, когда приложение находится в фоновом режиме - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь узнать текущее местоположение GPS, когда приложение находится в фоновом режиме или даже когда оно убито. по этой причине я создал класс службы под названием MyBackgroundLocationService.class

public class MyBackgroundLocationService extends Service {
private static final String TAG = MyBackgroundLocationService.class.getSimpleName();
private FusedLocationProviderClient mLocationClient;
LocationCallback mLocationCallBack;
public MyBackgroundLocationService() {
}

@Override
public void onCreate() {
    super.onCreate();
    mLocationClient = LocationServices.getFusedLocationProviderClient(getApplicationContext());
    mLocationCallBack = new LocationCallback(){
        @Override
        public void onLocationResult(LocationResult locationResult) {
            if (locationResult == null){
                Log.d(TAG, "onLocationResult: is null");
                return;
            }

            Log.d(TAG, "onLocationResult: "+locationResult.getLocations().get(0).getLatitude() + "/" + locationResult.getLocations().get(0).getLongitude());
        }
    };
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(TAG, "onStartCommand: ");
    getLocationUpdates();
    return START_STICKY;
}

private void getLocationUpdates() {
    final LocationRequest locationRequest = LocationRequest.create();

    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setInterval(1800);
    locationRequest.setFastestInterval(16);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            stopSelf();
        }
    }
    mLocationClient.requestLocationUpdates(locationRequest, mLocationCallBack, Looper.myLooper());
}

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

@Override
public void onDestroy() {
    super.onDestroy();
    Log.d(TAG, "onDestroyCommand: ");
   // mLocationClient.removeLocationUpdates(mLocationCallBack);
}

}

И я назвал службу из моего основного класса следующим образом:

Intent intent = new Intent(MapsActivity.this,MyBackgroundLocationService.class);
            startService(intent);

так я объявляю службу в файл манифеста:

<service
        android:name=".MyBackgroundLocationService"
        android:enabled="true"
        android:exported="false"
        />

Так что проблема в том, где я закрываю приложение, LocationCallBack останавливается, что мне делать?

...