служба заданий не останавливается, когда ее использование продолжает обновление местоположения с использованием расписания заданий Firebase - PullRequest
0 голосов
/ 06 февраля 2019

Я использую сервис Firebase JobScheduler, чтобы продолжить обновление местоположения, когда кнопка «ON» постоянно обновляет местоположение, даже если приложение убито из фона.но когда я снова открываю приложение.снова и попытайтесь остановить обновление местоположения. Моя служба заданий никогда не останавливается.

FBJDSingleton.java (FirebaseJobDispatcher single tone class)

public class FBJDSingleton {
private static FirebaseJobDispatcher firebaseJobDispatcher;
private FBJDSingleton() {

}
public static FirebaseJobDispatcher getInstance(Context context) {
    if (firebaseJobDispatcher == null) {
        firebaseJobDispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(context));
    } return firebaseJobDispatcher;
}

}

MainActivity.java

 final FirebaseJobDispatcher dispatcher = FBJDSingleton.getInstance(this);
 btnON.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Job job=dispatcher.newJobBuilder()
                    .setService(MyJobService.class)
                    .setLifetime(Lifetime.FOREVER)
                    .setRecurring(true)
                    .setTag("my_job")
                    .setTrigger(Trigger.executionWindow(5,5))
                    .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
                    .setConstraints(Constraint.ON_ANY_NETWORK)
                    .setReplaceCurrent(false).build();

            dispatcher.mustSchedule(job);

        }
    });

    btnOFF.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dispatcher.cancelAll();


        }
    });

MyJobService.java

public class MyJobService extends JobService implements GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener,LocationListener {

GoogleApiClient mLocationClient;
LocationRequest mLocationRequest = new LocationRequest();



@Override
public void onCreate() {
    super.onCreate();
    mLocationClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();

    mLocationRequest.setInterval(1000);
    // mLocationRequest.setSmallestDisplacement(10);
    mLocationRequest.setFastestInterval(1000);

    int priority = LocationRequest.PRIORITY_HIGH_ACCURACY; //by default

    mLocationRequest.setPriority(priority);
    mLocationClient.connect();
}

@Override
public boolean onStartJob(JobParameters job) {
    connectGoogleClient(job);

    return false;
}

@Override
public boolean onStopJob(JobParameters job) {
    jobFinished(job, false);
    return true;

}

private void connectGoogleClient(JobParameters parameters){

    jobFinished(parameters, true);


}

@Override
public void onConnected(@Nullable Bundle bundle) {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //                                          int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.


        //Permission not granted by user so cancel the further execution.

        return;
    }
    LocationServices.FusedLocationApi.requestLocationUpdates(mLocationClient, mLocationRequest,this);

}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

}

@Override
public void onLocationChanged(Location location) {

    if (location != null) {
        //Send result to activities

        if(Build.VERSION.SDK_INT>=18){
            Log.e("test","1");
            if(location.isFromMockProvider()){
                Log.e("test","2");
                Toast.makeText(this,"Turn off fake location.",Toast.LENGTH_SHORT).show();
            }else {
                Log.e("test","3");
                sendMessageToUI(String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude()));
            }
        }

        if(Build.VERSION.SDK_INT<18){

            if(Settings.Secure.getString(getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).equals("0")) {
                Log.e("test","4");
                Toast.makeText(this,"Turn off fake location.",Toast.LENGTH_SHORT).show();

            }else {
                Log.e("test","5");
                sendMessageToUI(String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude()));

            }

        }
    }

}

private void sendMessageToUI(String lat, String lng) {
    Log.e("test","latitude:"+lat);
    Log.e("test","longitude:"+lng);
}

}

...