0

バックグラウンドでユーザーの場所を取得する必要があるため、サービスクラス内で融合ロケーションプロバイダを使用しようとしています。以下のコードをonStart()メソッドの中に入れましたが、コンテキストMainActivity.getAppContext()は認識されません。サービスクラスで使用しているので、その場所で何を使用できますか?サービスクラス内で融合ロケーションプロバイダを使用するにはどうすればよいですか?

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

答えて

0

Serviceは、あなたがthisを使用することができますService内からそうContextです。

サービスでもMainActivity.getAppContext()が返される可能性が高いと思われるアプリケーションのコンテキストを返すgetApplicationContext()があります。あなたもそれを使うことができます。コードの下

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

サービス内部

 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!"); 
      } 

     } 
縮合位置プロバイダを使用する方法について説明
関連する問題