2015-05-02 3 views
0

Я звоню в службу, я получаю текущее местоположение на некотором интервале и сопоставляю местоположение с адресом, переданным службой. И если он находится в близком расстоянии, он будет гудеть по телефону. Теперь я попытался получить текущее местоположение по FusedLocationApi .Но я получил ошибку, когда я пишу эту частьПолучение повторного текущего местоположения внутри службы в android?

mGoogleApiClient = new GoogleApiClient.Builder(getApplicationContext()) 
          .addApi(LocationServices.API) 
          .addConnectionCallbacks(this)//here i got the error 
          .addOnConnectionFailedListener(this) 
          .build(); 
        mGoogleApiClient.connect(); 

я получил ошибку в компиляторе, как:

`addConnectionCallbacks` in builder can't be applied to java.lang.Runnable 

Я попытался дать getApplicationContext() вместо этих же, но result.I звоню обслуживание класс от фрагмента. Весь код:

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

    GoogleApiClient mGoogleApiClient; 
    LocationRequest mLocationRequest; 
    private static final String TAG = "HelloService"; 
    private boolean isRunning = false; 
    public Vibrator vibrator; 

    @Override 
    public void onCreate() { 
     Log.i(TAG, "Service onCreate"); 
     isRunning = true; 

    } 

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

     Log.i(TAG, "Service onStartCommand"); 
     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        //Bundle b=intent.getExtras(); 
        //Double lat = b.getDouble("lat"); 
        //Double lng = b.getDouble("lng"); 


        //vibrator = (Vibrator) getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE); 
        //vibrator.vibrate(3000); 

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


       } catch (Exception e) { 
        Log.e(TAG, Log.getStackTraceString(e)); 

       } 

       // stopSelf(); 
      } 
     }).start(); 


     return Service.START_STICKY; 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 

     Log.i(TAG, "Service onBind"); 
     return null; 
    } 

    @Override 
    public void onDestroy() { 

     Log.i(TAG, "Service onDestroy"); 
     isRunning = false; 
     mGoogleApiClient.disconnect(); 
    } 

    @Override 
    public void onConnected(Bundle bundle) { 

     Log.i(TAG, "Onconnected"); 
     mLocationRequest = LocationRequest.create(); 
     mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
     mLocationRequest.setInterval(2000); // Update location every second 
     //LocationServices.FusedLocationApi.requestLocationUpdates(
       //mGoogleApiClient, mLocationRequest,this); 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 
     Log.i(TAG, "Connection Suspended"); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     Log.i(TAG, "LocationChanged"); 
     Double lat1 = location.getLatitude(); 
     Double lng1 = location.getLongitude(); 
     Log.i(TAG,String.valueOf(lat1)+ ", " + String.valueOf(lng1)); 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 

    } 

    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { 

    } 

В чем проблема, и я иду по правому пути или есть какой-либо простой способ получить текущее местоположение на некотором интервале?

ответ

2

Ваш код

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

ставится в методе Run() анонимного Runnable класса, это означает, что this ключевое слово имеет в виду, что анонимный Runnable класс вместо вашего класса обслуживания. Поэтому просто изменить код, чтобы это решить вопрос:

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

Кроме того, этот код не занимает очень много времени для выполнения, так что вы можете просто переместить его из анонимного Runnable, и она будет работать как Что ж.

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