2017-02-21 45 views
0

Итак, у меня есть JobService, который вызывается на фоне. Однако мне нужно это, чтобы получить текущее местоположение и отправить его в веб-сервис. Webservice отлично работает, когда я отправляю статические данные. Однако получение местоположения является проблемой. Объект местоположения всегда равен нулю. Это то, что я пытался.Служба получения null как местоположение

public class GPSBackgroundJobService extends JobService implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 

private String LOGSERVICE = "GPS"; 

private InspectorsLogic mInspectorsLogic; 
ParsoContext mContext; 

private GoogleApiClient mGoogleApiClient; 

ParsoLocationListener mLocationListener; 
Location mLastLocation; 
Double longitude; 
Double latitude; 



@Override 
public void onCreate() { 
    super.onCreate(); 
    Log.i(LOGSERVICE, "onCreate"); 
    mContext = (ParsoContext) getApplicationContext(); 
    mInspectorsLogic = new InspectorsLogic(mContext); 


    if (mGoogleApiClient == null) { 
     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 
    } 
} 





@Override 
public boolean onStartJob(JobParameters job) { 
    Log.i(LOGSERVICE, "onStartJob called"); 
    mGoogleApiClient.connect(); 
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 

    if (mLastLocation!=null) { 
     latitude = mLastLocation.getLatitude(); 
     longitude =mLastLocation.getLongitude(); 
     sendGPSTask mSendGPSTask = new sendGPSTask(); 
     mSendGPSTask.execute(Double.toString(latitude), Double.toString(longitude)); 
    }else{ 
     Log.e(LOGSERVICE, "Lat and Long are null"); 
    } 
    return false; 
} 

@Override 
public boolean onStopJob(JobParameters job) { 
    mGoogleApiClient.disconnect(); 
    return false; 
} 

@Override 
public void onConnected(Bundle connectionHint) { 
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
} 

@Override 
public void onConnectionSuspended(int i) { 

} 

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 

} 


} 

ответ

0

Видимо код хорошо, чтобы заставить его работать, это то, что я сделал:

  1. проверка разрешений приложения (расположение один должен быть активирован)
  2. изменения настроек GPS для (данные для мобильных и Wi-Fi)

, делая это с текущим кодом, размещенным на вопрос, сделал его.

0

getLastLocation возвращает нулевое значение, если он не имеет местоположения починки yet-, что означает, если вы не используете GPS в другом месте, он почти всегда возвращается нуль. Чтобы убедиться, что вы получили местоположение, используйте getLocationUpdates и дождитесь, когда место будет исправлено (это не будет мгновенным, в зависимости от атмосферных условий, вне зависимости от того, находитесь вы или нет, и т. Д. Это может занять от нескольких секунд до минуты или около того просто никогда не бывает).

 Смежные вопросы

  • Нет связанных вопросов^_^