2015-04-18 3 views
13

Я пытаюсь получить информацию об обновлении местоположения. Для этого я создал службу, а в onStartCommand класса сервиса я создаю GoogleApiClient, но я не получаю звонок соединения в службе. Пожалуйста, помогите решить эту проблему.Использование GoogleApiClient в службе

Ниже приведены это код услуги и в деятельности я начал службу с использованием метода StartService:

startService(new Intent(this, LocationService.class)); 

код услуги

public class LocationService extends Service implements GoogleApiClient.ConnectionCallbacks, 
        GoogleApiClient.OnConnectionFailedListener, LocationListener { 

private GoogleApiClient mLocationClient; 

private Location mCurrentLocation; 
LocationRequest mLocationRequest; 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    // TODO do something useful 
    Toast.makeText(this, "onStartCommand", Toast.LENGTH_SHORT).show(); 
    mLocationClient = new GoogleApiClient.Builder(LocationService.this) 
    .addApi(LocationServices.API).addConnectionCallbacks(LocationService.this) 
    .addOnConnectionFailedListener(LocationService.this).build(); 

    mLocationRequest = new LocationRequest(); 
    mLocationRequest.setInterval(1000); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 

    mLocationRequest.setFastestInterval(1000); 
    return Service.START_NOT_STICKY; 
} 

@Override 
public void onLocationChanged(Location location) { 
    // TODO Auto-generated method stub 
    mCurrentLocation = location; 
    Toast.makeText(this, mCurrentLocation.getLatitude() +", "+ mCurrentLocation.getLatitude(), Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void onConnectionFailed(ConnectionResult arg0) { 
    // TODO Auto-generated method stub 
    Toast.makeText(this, "Connection failed", Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void onConnected(Bundle arg0) { 
    // TODO Auto-generated method stub 
    Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show(); 
    //if(servicesConnected()) { 
     LocationServices.FusedLocationApi.requestLocationUpdates(mLocationClient, mLocationRequest, this); 
    //} 

} 

@Override 
public void onConnectionSuspended(int arg0) { 
    // TODO Auto-generated method stub 
    Toast.makeText(this, "Disconnected. Please re-connect.", 
      Toast.LENGTH_SHORT).show(); 
} 



@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 

}

+0

братан я также работает на тех же thing.I нужно текущее местоположение с помощью службы. Как ты bro.I нужно solution.Help меня –

ответ

15

Основной вопрос: вы никогда не называйте mLocationClient.connect() поэтому процесс подключения никогда не запускается.

Кроме того, onStartService() можно назвать несколько раз (то есть, каждый раз, когда startService() называется - вместо этого, вы должны переместить это onCreate() для Service, чтобы убедиться, что он вызывается только один раз в течение всего жизненного цикла вашей службы Точно так же, вы должны. removeLocationUpdates() в onDestroy() и отсоедините mLocationClient.

+0

+1 за .Подключать (), поскольку я пропустил это, но до сих пор нет гарантии, что его IntentService будет вокруг, когда вызываются связанные обратные вызовы. –

+1

@BillMote - it p retty ясно говорит, что 'extends Service' - где вы видите' IntentService'? – ianhanniballake

+0

Человек, вы правы. IDK ... Я бы поклялся, что это IntentService. Думаю, пришло время спать. –

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