i've a big probleme for 4 months now, and i don't know what's the solution. When i'm launching my application, the app demand to the user if he want to activate the loalisation (its important), if he say "no", then nothing happen but the app will ask him later, and if he say "yes", then the app will open setting location of the app, and the user need to press "activate location" on phone setting.
The probleme is, after activating location (it doesn't show the userLocation bc i don't know how to do this and its not my first priority), when you click on the geolocalisationButton , you need to press 3 time the button for showing user his location (sometime 2, or 4 times, it's depend, i don't know why).
This is the video for the exemple --> video
onCreate Code
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout_map_priere);
supportMapFragment = (SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.google_map);
//location
client = LocationServices.getFusedLocationProviderClient(layout_map_priere.this);
//check Permissions
if (ActivityCompat.checkSelfPermission(layout_map_priere.this,
Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(layout_map_priere.this,
Manifest.permission.ACCESS_COARSE_LOCATION) ==
PackageManager.PERMISSION_GRANTED) {
//When both permission granted
//Call method
getCurrentLocation();
}else {
//When permissions denied
//Request permission
ActivityCompat.requestPermissions(layout_map_priere.this, new String[]{
Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION
}, 100);
}
trackButton();
}
My Customize Geolocalisation Button
private void geoButton() {
locationButton = (View) supportMapFragment.getView().findViewById(Integer.parseInt("1")).getParent();
locationButton = supportMapFragment.getView().findViewById(Integer.parseInt("2"));
locationButton.setVisibility(View.GONE);
}
onClickable Geolocalisation Button
private void trackButton() {
final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
ImageButton camera_track = (ImageButton) findViewById(R.id.back_to_camera_tracking_mode);
geoButton();
camera_track.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER) &&
manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
getCurrentLocation();
}else {
buildAlertMessageNoGps();
}
}
});
}
Getting The User Location
@SuppressLint("MissingPermission")
private void getCurrentLocation() {
//Initialize task Location
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//check Condition
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
//When Location service is enabled
//Get Last Location
client.getLastLocation().addOnCompleteListener(new OnCompleteListener<Location>() {
@Override
public void onComplete(@NonNull Task<Location> task) {
Location location = task.getResult();
//Check condition
if (location != null){
//Sync map
supportMapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap map) {
//initialize Lat Lng
LatLng myposition = new LatLng(location.getLatitude(), location.getLongitude());
map.animateCamera(CameraUpdateFactory.newLatLngZoom(myposition, 12));
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
if (ActivityCompat.checkSelfPermission(layout_map_priere.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(layout_map_priere.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
map.setMyLocationEnabled(true);
locationButton = (View) supportMapFragment.getView().findViewById(Integer.parseInt("1")).getParent();
locationButton = supportMapFragment.getView().findViewById(Integer.parseInt("2"));
locationButton.setVisibility(View.GONE);
View toolbar = ((View) supportMapFragment.getView().findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("4"));
RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) toolbar.getLayoutParams();
rlp.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0);
rlp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, 0);
rlp.addRule(RelativeLayout.ALIGN_PARENT_LEFT, 0);
rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
rlp.setMargins(0, 0, 30, 30);
map.getUiSettings().setCompassEnabled(false);
map.getUiSettings().setMapToolbarEnabled(false);
map.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
final LinearLayout layout_scroll = (LinearLayout) findViewById(R.id.layout_scroll);
final ViewGroup.LayoutParams params = layout_scroll.getLayoutParams();
layout_scroll.setVisibility(View.INVISIBLE);
params.height = 0;
layout_scroll.setLayoutParams(params);
final LinearLayout layout_more_block = (LinearLayout) findViewById(R.id.layout_more_block);
final ViewGroup.LayoutParams params_more = layout_more_block.getLayoutParams();
layout_more_block.setVisibility(View.INVISIBLE);
params_more.height = 0;
layout_more_block.setLayoutParams(params_more);
Animation slideDown = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_down);
layout_more_block.startAnimation(slideDown);
}
});
}
});
}else {
LocationRequest locationRequest = new LocationRequest()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(10000)
.setFastestInterval(1000)
.setNumUpdates(1);
//Initialize location call back
LocationCallback locationCallback = new LocationCallback(){
@Override
public void onLocationResult(LocationResult locationResult) {
//initalize location
Location location1 = locationResult.getLastLocation();
}
};
//Request location updates
client.requestLocationUpdates(locationRequest, locationCallback, Looper.myLooper());
}
}
});
}else {
buildAlertMessageNoGps();
}
}
Finnaly, My Builded Alert Message If No Gps
private void buildAlertMessageNoGps() {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Votre GPS semble être désactivé. Voulez-vous l'activer ?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(final DialogInterface dialog, final int id) {
startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(final DialogInterface dialog, final int id) {
dialog.cancel();
}
});
final AlertDialog alert = builder.create();
alert.show();
}
I really need your help, why i have this problem, and how can i fix it