使用基本位置示例代码创建服务

时间:2015-12-20 12:42:21

标签: android service gps location

我想在Android中进行一项服务(后台操作),以便时不时地跟踪设备的位置,并将其存储在SharedPreference上,或者在位置发生变化时将其发送到我的服务器。我来自Get current location name of user without using gps or internet but by using Network_Provider in androidAndroid Developers - Getting the Last Known Location的这段代码。

这是代码:

public class MainActivity extends AppCompatActivity implements
ConnectionCallbacks, OnConnectionFailedListener {

    protected static final String TAG = "MainActivity";

    /**
    * Provides the entry point to Google Play services.
    */
    protected GoogleApiClient mGoogleApiClient;

    /**
    * Represents a geographical location.
    */
    protected Location mLastLocation;

    protected String mLatitudeLabel;
    protected String mLongitudeLabel;
    protected TextView mLatitudeText;
    protected TextView mLongitudeText;



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);

        mLatitudeLabel = getResources().getString(R.string.latitude_label);
        mLongitudeLabel = getResources().getString(R.string.longitude_label);
        mLatitudeText = (TextView) findViewById((R.id.latitude_text));
        mLongitudeText = (TextView) findViewById((R.id.longitude_text));

        buildGoogleApiClient();
    }

    /**
    * Builds a GoogleApiClient. Uses the addApi() method to request the LocationServices API.
    */
    protected synchronized void buildGoogleApiClient() {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
        .addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)
        .addApi(LocationServices.API)
        .build();
    }

    @Override
    protected void onStart() {
        super.onStart();
        mGoogleApiClient.connect();
    }

    @Override
    protected void onStop() {
        super.onStop();
        if (mGoogleApiClient.isConnected()) {
            mGoogleApiClient.disconnect();
        }
    }

    /**
    * Runs when a GoogleApiClient object successfully connects.
    */
    @Override
    public void onConnected(Bundle connectionHint) {
        // Provides a simple way of getting a device's location and is well suited for
        // applications that do not require a fine-grained location and that do not need location
        // updates. Gets the best and most recent location currently available, which may be null
        // in rare cases when a location is not available.
        mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
        if (mLastLocation != null) {
            Log.e("Location", "not null");
            makeUseOfNewLocation(mLastLocation);
            } else {
            Toast.makeText(this, R.string.no_location_detected, Toast.LENGTH_LONG).show();
            // should request new one
            // location should be enabled
            Log.i(TAG,
            "No location data previously acquired.. should request!");

            Toast.makeText(this,
            "Requesting location data ..",
            Toast.LENGTH_SHORT).show();

            LocationRequest locationRequest = LocationRequest.create();
            locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
            locationRequest.setInterval(5000);

            PendingResult<Status> result = LocationServices.FusedLocationApi
            .requestLocationUpdates(mGoogleApiClient,
            locationRequest,
            new LocationListener() {

                @Override
                public void onLocationChanged(Location location) {
                    Log.e("Location", "not null");
                    makeUseOfNewLocation(location);
                }
            });
            // TODO: use result to retrieve more info
            Toast.makeText(this, result.toString(),Toast.LENGTH_LONG);
        }
    }

    @Override
    public void onConnectionFailed(ConnectionResult result) {
        // Refer to the javadoc for ConnectionResult to see what error codes might be returned in
        // onConnectionFailed.
        Log.i(TAG, "Connection failed: ConnectionResult.getErrorCode() = " + result.getErrorCode());
    }


    @Override
    public void onConnectionSuspended(int cause) {
        // The connection to Google Play services was lost for some reason. We call connect() to
        // attempt to re-establish the connection.
        Log.i(TAG, "Connection suspended");
        mGoogleApiClient.connect();
    }
    private void makeUseOfNewLocation(Location location) {
        // do your stuff here
        mLatitudeText.setText(String.format("%s: %f", mLatitudeLabel,
        location.getLatitude()));
        mLongitudeText.setText(String.format("%s: %f", mLongitudeLabel,
        location.getLongitude()));
    }
}

我的问题是,只需在此类上扩展Service,此代码就可以成为服务。这是否有效,能够在背景中不时跟踪设备的位置

0 个答案:

没有答案