从后台杀死应用后,应用应在Android中运行gps跟踪应用

时间:2018-01-04 12:42:56

标签: android geolocation android-gps

我正在制作GPS追踪应用程序。该应用应跟踪用户位置。就我而言,它会跟踪应用程序何时处于后台并打开。如果我从后台杀了我的应用程序,我没有获得位置更新。其他应用程序,如Life360即使在杀死应用程序后也可以跟踪用户的位置。

这是我们的代码,我们仍有问题

公共类BService扩展服务{

private static final String TAG = "BService";
private static Location xLocation;
private static LocationRequest mLocationRequest;
private static GoogleApiClient mGoogleApiClient;
private static FusedLocationProviderApi mFusedLocationProviderApi = LocationServices.FusedLocationApi;
private static String mLocation = "";
private Context xContext;

private LocationListener mLocationListener = new LocationListener() {
    @Override
    public void onLocationChanged(Location lo) {
        Log.i(TAG, "onLocationChanged: " + mLocation);
    }
};

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.e(TAG, "onStartCommand: ");
    xContext = this;
    initGps();
    return START_STICKY;
}

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

private void initGps() {
    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(1000 * 60);
    mLocationRequest.setFastestInterval(1000 * 40);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);

    mGoogleApiClient = new GoogleApiClient.Builder(xContext)
            .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                @Override
                public void onConnected(@Nullable Bundle bundle) {
                    Location lo = null;
                    if (ActivityCompat.checkSelfPermission(xContext, Manifest.permission.ACCESS_FINE_LOCATION) ==
                            PackageManager.PERMISSION_GRANTED)
                        lo = mFusedLocationProviderApi.getLastLocation(mGoogleApiClient);
                    if (lo != null) {
                        Log.i(TAG, "onConnected: " + lo);
                    }
                }

                @Override
                public void onConnectionSuspended(int i) {
                }
            })
            .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
                }
            })
            .addApi(LocationServices.API)
            .build();

    mGoogleApiClient.connect();

    LocationSettingsRequest mLocationSettingsRequest = new LocationSettingsRequest.Builder()
            .addLocationRequest(mLocationRequest)
            .build();

    LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, mLocationSettingsRequest)
            .setResultCallback(new ResultCallback<LocationSettingsResult>() {
                @Override
                public void onResult(@NonNull LocationSettingsResult locationSettingsResult) {
                    final Status status = locationSettingsResult.getStatus();
                    switch (status.getStatusCode()) {
                        case LocationSettingsStatusCodes.SUCCESS:
                            Notifier.cancel(xContext);
                            if (ActivityCompat.checkSelfPermission(xContext, Manifest.permission.ACCESS_FINE_LOCATION) ==
                                    PackageManager.PERMISSION_GRANTED)
                                mFusedLocationProviderApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, mLocationListener);
                            break;
                        case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                            // Gps Disabled
                            Notifier.notify(xContext, "You've turned off location services, which has disabled Beep." +
                                    " Turn location services on to reconnect.");
                            break;
                    }
                }
            });
}

}

我们遇到的问题是onservice方法正在运行但内部代码没有响应。当应用程序被杀死时,服务没有响应。在自定义操作系统Android中

0 个答案:

没有答案