2015-04-18 7 views
13

मैं सेवा में स्थान अपडेट जानकारी प्राप्त करने का प्रयास कर रहा हूं। इसके लिए मैंने एक सेवा बनाई है और सर्विस क्लास के स्टार्ट कमांड में मैं 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

भाई मैं भी एक ही चीज़ पर काम कर रहा हूँ सेवा का उपयोग करके वर्तमान स्थान की जरूरत है। मुझे बाहर solution.Help –

उत्तर

15

मुख्य मुद्दा: आप फोन कभी नहीं mLocationClient.connect() इसलिए कनेक्शन प्रक्रिया कभी शुरू नहीं होती है।

इसके अलावा, onStartService() कहा जा सकता है कई बार (यानी, हर बार startService() कहा जाता है - इसके बजाय, आप इस onCreate() करने के लिए अपने Service के लिए सुनिश्चित करने के लिए यह केवल आपके सेवा की जीवन चक्र के दौरान एक बार कहा जाता है बढ़ना चाहिए इसी तरह, आप ऐसा करना चाहिए। onDestroy() में removeLocationUpdates() और डिस्कनेक्ट करें, अपनी mLocationClient

+0

+1 .connect के लिए आप कैसे bro.I जरूरत थी है () जैसा कि मैंने इसे याद किया, लेकिन अभी भी कोई गारंटी नहीं है कि कनेक्टेड कॉलबैक कहलाए जाने पर उनके इरादे सेवा के आसपास होगा। –

+1

@ बिलमोटे - यह पी रेटी स्पष्ट रूप से कहता है 'सेवा बढ़ाता है' - आप 'इराद सेवा' कहां देखते हैं? – ianhanniballake

+0

मैन, आप सही हैं। आईडीके ... मैंने शपथ ली होगी कि यह एक इरादा सेवा थी। मुझे लगता है कि यह बिस्तर के लिए समय है। –

संबंधित मुद्दे