0

Kullanıcının konumunu arka planda almam gerekiyor, bu nedenle Hizmet sınıfımdaki Fused Location Provider'ı kullanmaya çalışıyorum. Aşağıdaki kodu onStart() yönteminin içine koydum, ancak bağlam MainActivity.getAppContext() tanınmadı. Hizmet sınıfımda kullanıyorum bu yana ne kullanabilirim? Bir ServiceFused Location Provider'ı bir Hizmet sınıfı içinde nasıl kullanabilirim?

GoogleApi = new GoogleApiClient.Builder(MainActivity.getAppContext()) 
     .addConnectionCallbacks(this) 
     .addOnConnectionFailedListener(this) 
     .addApi(LocationServices.API) 
     .build(); 

cevap

0

sen this kullanabilirsiniz Service içinden öylesine bir Context olduğunu.

Hizmetin, MainActivity.getAppContext()'un büyük olasılıkla geri döndüğü sanılan uygulamanın içeriğini döndüren getApplicationContext() da vardır. Bunu da kullanabilirsin. Kodun altında

GoogleApi = new GoogleApiClient.Builder(getApplicationContext()) 
     .addConnectionCallbacks(this) 
     .addOnConnectionFailedListener(this) 
     .addApi(LocationServices.API) 
     .build(); 
0

bir hizmet

 import android.Manifest; 
     import android.app.Service; 
     import android.content.Intent; 
     import android.content.pm.PackageManager; 
     import android.location.Location; 
     import android.os.Bundle; 
     import android.os.IBinder; 
     import android.support.annotation.NonNull; 
     import android.support.annotation.Nullable; 
     import android.support.v4.app.ActivityCompat; 
     import android.util.Log; 

     import com.google.android.gms.common.ConnectionResult; 
     import com.google.android.gms.common.api.GoogleApiClient; 
     import com.google.android.gms.location.LocationListener; 
     import com.google.android.gms.location.LocationRequest; 
     import com.google.android.gms.location.LocationServices; 

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

      private String TAG = LocationService.class.getSimpleName(); 
      private GoogleApiClient mGoogleApiClient; 
      private LocationRequest mLocationRequest; 

      private static final long INTERVAL = 1000 * 30 * 60; 
      private static final long FASTEST_INTERVAL = 1000 * 25 * 60; 
      private static final long MEDIUM_INTERVAL = 1000 * 30 * 60; 

      public LocationService() { 
      } 

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

      @Override 
      public int onStartCommand(Intent intent, int flags, int startId) { 

       if (!mGoogleApiClient.isConnected()) { 
        mGoogleApiClient.connect(); 
       } else { 
        startLocationUpdates(); 
       } 
       return START_STICKY; 
      } 


      @Override 
      public IBinder onBind(Intent intent) { 
       // TODO: Return the communication channel to the service. 
       throw new UnsupportedOperationException("Not yet implemented"); 
      } 

      protected void createLocationRequest() { 
       mLocationRequest = new LocationRequest(); 
       mLocationRequest.setInterval(MEDIUM_INTERVAL); 
       mLocationRequest.setFastestInterval(FASTEST_INTERVAL); 
       mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
      } 

      @Override 
      public void onConnected(@Nullable Bundle bundle) { 
       Log.v(TAG, "onConnected - isConnected ...............: " + mGoogleApiClient.isConnected()); 
       if (mGoogleApiClient.isConnected()) { 
        startLocationUpdates(); 
       } 
      } 

      protected void startLocationUpdates() { 
       if (mGoogleApiClient != null) { 
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
         return; 
        } 
        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); 
        Log.v(TAG, "Location update started ..............: "); 
       } 
      } 

      protected void stopLocationUpdates() { 
       if (mGoogleApiClient != null && mGoogleApiClient.isConnected() && LocationServices.FusedLocationApi != null) { 
        LocationServices.FusedLocationApi.removeLocationUpdates(
          mGoogleApiClient, this); 
        Log.v(TAG, "Location update stopped ......................."); 
        mGoogleApiClient.disconnect(); 
       } 
      } 


      @Override 
      public void onConnectionSuspended(int i) { 

      } 

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

      } 

      @Override 
      public void onLocationChanged(Location location) { 
       Log.v(TAG, "Latitude: " + location.getLatitude() + " Longitude: " + location.getLongitude()); 
      } 

      @Override 
      public void onDestroy() { 
       super.onDestroy(); 
       stopLocationUpdates(); 
       Log.v(TAG, "Service Stopped!"); 
      } 

     } 
içindeki erimiş bir konum sağlayıcı nasıl kullanılacağı açıklanır
İlgili konular