Разработка Android-приложений с Augmented Reality - страница 13



*/

protected synchronized void buildGoogleApiClient () {

mGoogleApiClient = new GoogleApiClient. Builder (this)

.addConnectionCallbacks (this)

.addOnConnectionFailedListener (this)

.addApi (LocationServices. API)

.build ();

createLocationRequest ();

}


protected void createLocationRequest () {

mLocationRequest = LocationRequest.create ();


// Sets the desired interval for active location updates. This interval is

// inexact. You may not receive updates at all if no location sources are available, or

// you may receive them slower than requested. You may also receive updates faster than

// requested if other applications are requesting location at a faster interval.

mLocationRequest.setInterval (10000);


// Sets the fastest rate for active location updates. This interval is exact, and your

// application will never receive updates faster than this value.

mLocationRequest.setFastestInterval (5000);


mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

}


@Override

public void onStart () {

super. onStart ();

mGoogleApiClient.connect ();

}


@Override

public void onStop () {

super. onStop ();

mGoogleApiClient. disconnect ();

}


@Override

public void onResume () {

super. onResume ();


// Within {@code onPause ()}, we pause location updates, but leave the

// connection to GoogleApiClient intact. Here, we resume receiving

// location updates if the user has requested them.


if (mGoogleApiClient.isConnected ()) {

startLocationUpdates ();

}

}


@Override

protected void onPause () {

super. onPause ();

// Stop location updates to save battery, but don’t disconnect the GoogleApiClient object.

if (mGoogleApiClient.isConnected ()) {

stopLocationUpdates ();

}

}


protected void startLocationUpdates () {


if (ActivityCompat.checkSelfPermission (this, android.Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission (this, android.Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED) {


return;

}

LocationServices.FusedLocationApi.requestLocationUpdates (

mGoogleApiClient, mLocationRequest, this);

}


/**

* Removes location updates from the FusedLocationApi.

*/

protected void stopLocationUpdates () {

// It is a good practice to remove location requests when the activity is in a paused or

// stopped state. Doing so helps battery performance and is especially

// recommended in applications that request frequent location updates.


// The final argument to {@code requestLocationUpdates ()} is a LocationListener

// (http://developer.android.com/reference/com/google/android/gms/location/LocationListener.html).


LocationServices.FusedLocationApi.removeLocationUpdates (mGoogleApiClient, this);

}


@Override

public boolean onMarkerClick (Marker marker) {

// To get the GeoObject that owns the marker we use the following

// method:

GeoObject geoObject = mGoogleMapPlugin.getGeoObjectOwner (marker);

if (geoObject!= null) {

Toast.makeText (this, «Click on a marker owned by a GeoOject with the name: " + geoObject.getName (),

Toast.LENGTH_SHORT).show ();

}

return false;

}


@Override

public void onMapReady (GoogleMap googleMap) {

mMap=googleMap;

// We create the world and fill the world

mWorld = CustomWorldHelper.generateObjects (this, mCurrentLocation);


// As we want to use GoogleMaps, we are going to create the plugin and

// attach it to the World

mGoogleMapPlugin = new GoogleMapWorldPlugin (this);