package com.example.locationdialogbox; | |
import androidx.fragment.app.FragmentActivity; | |
import android.content.IntentSender; | |
import android.os.Bundle; | |
import android.util.Log; | |
import com.google.android.gms.common.ConnectionResult; | |
import com.google.android.gms.common.api.GoogleApiClient; | |
import com.google.android.gms.common.api.PendingResult; | |
import com.google.android.gms.common.api.ResultCallback; | |
import com.google.android.gms.common.api.Status; | |
import com.google.android.gms.location.LocationRequest; | |
import com.google.android.gms.location.LocationServices; | |
import com.google.android.gms.location.LocationSettingsRequest; | |
import com.google.android.gms.location.LocationSettingsResult; | |
import com.google.android.gms.location.LocationSettingsStatusCodes; | |
import com.google.android.gms.maps.CameraUpdateFactory; | |
import com.google.android.gms.maps.GoogleMap; | |
import com.google.android.gms.maps.OnMapReadyCallback; | |
import com.google.android.gms.maps.SupportMapFragment; | |
import com.google.android.gms.maps.model.LatLng; | |
import com.google.android.gms.maps.model.MarkerOptions; | |
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { | |
private GoogleMap mMap; | |
private GoogleApiClient googleApiClient; | |
final static int REQUEST_LOCATION = 199; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_maps); | |
// Obtain the SupportMapFragment and get notified when the map is ready to be used. | |
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() | |
.findFragmentById(R.id.map); | |
mapFragment.getMapAsync(this); | |
//enable Gps method | |
enableLoc(); | |
} | |
/** | |
* Manipulates the map once available. | |
* This callback is triggered when the map is ready to be used. | |
* This is where we can add markers or lines, add listeners or move the camera. In this case, | |
* we just add a marker near Sydney, Australia. | |
* If Google Play services is not installed on the device, the user will be prompted to install | |
* it inside the SupportMapFragment. This method will only be triggered once the user has | |
* installed Google Play services and returned to the app. | |
*/ | |
@Override | |
public void onMapReady(GoogleMap googleMap) { | |
mMap = googleMap; | |
// Add a marker in Sydney and move the camera | |
LatLng sydney = new LatLng(-34, 151); | |
mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); | |
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); | |
} | |
private void enableLoc() { | |
if (googleApiClient == null) { | |
googleApiClient = new GoogleApiClient.Builder(MapsActivity.this) | |
.addApi(LocationServices.API) | |
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { | |
@Override | |
public void onConnected(Bundle bundle) { | |
} | |
@Override | |
public void onConnectionSuspended(int i) { | |
googleApiClient.connect(); | |
} | |
}) | |
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() { | |
@Override | |
public void onConnectionFailed(ConnectionResult connectionResult) { | |
Log.d("Location error","Location error " + connectionResult.getErrorCode()); | |
} | |
}).build(); | |
googleApiClient.connect(); | |
LocationRequest locationRequest = LocationRequest.create(); | |
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); | |
locationRequest.setInterval(30 * 1000); | |
locationRequest.setFastestInterval(5 * 1000); | |
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() | |
.addLocationRequest(locationRequest); | |
builder.setAlwaysShow(true); | |
PendingResult<LocationSettingsResult> result = | |
LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build()); | |
result.setResultCallback(new ResultCallback<LocationSettingsResult>() { | |
@Override | |
public void onResult(LocationSettingsResult result) { | |
final Status status = result.getStatus(); | |
switch (status.getStatusCode()) { | |
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: | |
try { | |
// Show the dialog by calling startResolutionForResult(), | |
// and check the result in onActivityResult(). | |
status.startResolutionForResult(MapsActivity.this, REQUEST_LOCATION); | |
// finish(); | |
} catch (IntentSender.SendIntentException e) { | |
// Ignore the error. | |
} | |
break; | |
} | |
} | |
}); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment