Lorsque j'entre dans un écran, je vérifie si le GPS est activé, sinon, la boîte de dialogue permettant d'activer le GPS s'affiche. Lorsque l'utilisateur clique sur Oui, onActivityResult -> GPS est activé et j'essaie d'obtenir l'emplacement, mais cela retourne toujoursLa position actuelle est comme nulle dans android
Lorsque j'entre dans l'écran avec le GPS déjà activé, l'emplacement est récupéré correctement. Cela fait quelques jours que je me bats avec ça et je n'arrive pas à trouver de ressources.
s'il vous plaît aidez-moi quoi ai-je fait de mal?
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.recyler_list, container, false);
initializeView(view);
registerGoogleClient()
return view;
}
private void registerGoogleClient() {
try {
// Create an instance of GoogleAPIClient.
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
LocationRequest locationRequest = LocationRequest.create();
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
builder.addLocationRequest(locationRequest);
builder.setAlwaysShow(true);
locationSettingsRequest = builder.build();
connectGoogleApiClient();
}
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
@Override
public void onStart() {
super.onStart();
try {
connectGoogleApiClient();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
private void connectGoogleApiClient() {
try {
if (mGoogleApiClient != null) {
mGoogleApiClient.connect();
checkDeviceGps();
}
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
@Override
public void onStop() {
super.onStop();
disConnectGoogleApiClient();
}
private void disConnectGoogleApiClient() {
try {
if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
@Override
public void onConnected(Bundle connectionHint) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
System.out.println("if block");
if (getActivity().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
&& getActivity().checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
// mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
}
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
} else {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
}
System.out.println("mLastLocation is====>" + mLastLocation);
if (mLastLocation != null) {
latitude = mLastLocation.getLatitude();
longtude = mLastLocation.getLongitude();
System.out.println("Latitude====>" + mLastLocation.getLatitude());
System.out.println("Longitude====>" + mLastLocation.getLongitude());
}
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
private void checkDeviceGps() {
try {
PendingResult<LocationSettingsResult> pendingResult =
LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, locationSettingsRequest);
pendingResult.setResultCallback(this);
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
@Override
public void onResult(@NonNull LocationSettingsResult locationSettingsResult) {
final Status status = locationSettingsResult.getStatus();
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
try {
status.startResolutionForResult(getActivity(), 100);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
break;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 100:
getLatLong();
break;
}
}
private void getLatLong() {
try {
if (mLastLocation != null) {
latitude = mLastLocation.getLatitude();
longtude = mLastLocation.getLongitude();
System.out.println("Latitude====>" + mLastLocation.getLatitude());
System.out.println("Longitude====>" + mLastLocation.getLongitude());
}
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
avez-vous essayé d'attendre quelques secondes dites 20 -30 avant pour chercher des données après avoir autorisé le GPS – Ak9637
comment puis-je faire cela peut-il s'il vous plaît expliquer avec le code? – AbhiRam
Vous devez attendre quelques secondes pour obtenir l'emplacement. Vous pouvez utiliser le fil pour cela. –