在 android 中获取服务内的重复当前位置?

Getting Repeated Current Location inside a Service in android?

我正在调用一项服务,我会在某个时间间隔获取当前位置,并将该位置与传递给 service.and 的位置相匹配,如果它在近距离内,它会向 phone.Now 发出嗡嗡声我试图通过 FusedLocationApi 获取当前位置。但是当我写这部分时出现错误

   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 我正在从 fragment.My 调用服务 class 整个代码:

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) {

    }

实际上有什么问题,我走的路是正确的还是有任何简单的方法可以在某个时间间隔获取当前位置?

您的代码

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

放在匿名 Runnable class 的 运行() 方法中,这意味着 this 关键字指的是匿名 Runnable class 而不是你的服务 class。因此只需将代码更改为此即可解决问题:

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

此外,此代码的执行时间不长,因此您只需将其移出匿名 Runnable 即可正常运行。