How to get FusedLocation from IntentService

  • How to retrieve current location by using the new FusedLocation API from an IntentService ?
  • How can i make sure that IntentService will receive all callbacks from FusedLocation API ? ie, How can i obtain the location object synchronously?

  • 这可能会帮助你

    import java.util.ArrayList;
        import java.util.List;
    
        import org.apache.http.NameValuePair;
        import org.apache.http.message.BasicNameValuePair;
        import org.json.JSONArray;
        import org.json.JSONException;
        import org.json.JSONObject;
    
        import android.app.AlertDialog;
        import android.app.Notification;
        import android.app.NotificationManager;
        import android.app.PendingIntent;
        import android.app.Service;
        import android.content.Context;
        import android.content.Intent;
        import android.content.SharedPreferences;
        import android.location.Criteria;
        import android.location.Location;
        import android.location.LocationManager;
        import android.os.Bundle;
        import android.os.Handler;
        import android.os.IBinder;
        import android.util.Log;
        import android.widget.Toast;
    
        import com.example.driverapplication.CommonUtilities;
        import com.example.driverapplication.R;
        import com.example.driverapplication.ServiceHandler;
        import com.example.driverapplication.utilities.ConnectionDetector;
        import com.google.android.gms.common.ConnectionResult;
        import com.google.android.gms.common.api.GoogleApiClient;
        import com.google.android.gms.location.LocationRequest;
        import com.google.android.gms.location.LocationServices;
    
        public class LocationUpdate extends Service implements GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener {
            private static final String TAG = "DRIVER";
            private LocationManager mLocationManager = null;
            private static final int LOCATION_INTERVAL = 30000;
            private static final float LOCATION_DISTANCE = 0;
            private double currentLat, currentLng;
            private SharedPreferences pref;
            private String driverId;
            private GoogleApiClient mGoogleApiClient;
            // A request to connect to Location Services
            private LocationRequest mLocationRequest;
    
            private LocationListener locationListener;
    
            private class LocationListener implements
                    com.google.android.gms.location.LocationListener {
    
                public LocationListener() {
                }
    
                @Override
                public void onLocationChanged(Location location) {
                    Log.e(TAG, "onLocationChanged: " + location);
                    currentLat = location.getLatitude();
                    currentLng = location.getLongitude();
    
                }
    
    
            }
    
    
            @Override
            public IBinder onBind(Intent arg0) {
                return null;
            }
    
            @Override
            public int onStartCommand(Intent intent, int flags, int startId) {
                Log.e(TAG, "onStartCommand");
                super.onStartCommand(intent, flags, startId);
                boolean stopService = false;
                if (intent != null)
                    stopService = intent.getBooleanExtra("stopservice", false);
    
                System.out.println("stopservice " + stopService);
    
                locationListener = new LocationListener();
                if (stopService)
                    stopLocationUpdates();
                else {
                    if (!mGoogleApiClient.isConnected())
                        mGoogleApiClient.connect();
                }
    
                return START_STICKY;
            }
    
            @Override
            public void onCreate() {
                Log.e(TAG, "onCreate");
                pref = getSharedPreferences("driver_app", MODE_PRIVATE);
                driverId = pref.getString("driver_id", "");
                mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addApi(LocationServices.API).addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this).build();
            }
    
    
    
            @Override
            public void onDestroy() {
                Log.e(TAG, "onDestroy");
                super.onDestroy();
            }
    
            public void stopLocationUpdates() {
                LocationServices.FusedLocationApi.removeLocationUpdates(
                        mGoogleApiClient, locationListener);
    
                if (mGoogleApiClient.isConnected())
                    mGoogleApiClient.disconnect();
            }
    
    
            @Override
            public void onConnectionFailed(ConnectionResult arg0) {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void onConnected(Bundle arg0) {
                // TODO Auto-generated method stub
                mLocationRequest = LocationRequest.create();
                mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
                mLocationRequest.setInterval(35000);
                mLocationRequest.setFastestInterval(30000);
                startLocationUpates();
            }
            private void startLocationUpates() {
                LocationServices.FusedLocationApi.requestLocationUpdates(
                        mGoogleApiClient, mLocationRequest, locationListener);
            }
    
    
            @Override
            public void onConnectionSuspended(int arg0) {
                // TODO Auto-generated method stub
    
            }
    
        }
    
    链接地址: http://www.djcxy.com/p/84770.html

    上一篇: 如何强制停止Android应用程序

    下一篇: 如何从IntentService获取FusedLocation