J'essaie de rendre mon application MAP Rediriger vers les paramètres des autorisations de localisation et une fois que les autorisations sont accordées à nouveau à nouveau à l'application. Pour une raison quelconque, mon Voici le code: p> manifeste: p> OnActivityResult code> n'est même pas appelé après le démarrage de l'intention d'activité. et fondamentalement, ce qui se passe est lorsque je clique sur le bouton SNACKBAR CODE> ACTION qui apparaît, il commence le paramétrage et redirige-moi aux paramètres gentiment, mais l'activité ne va pas pour l'état de résultat et le OnAstiVitySult code> n'est jamais appelé
Toute suggestion?
3 Réponses :
int PERMISSION_ID = 44;
FusedLocationProviderClient mFusedLocationClient;
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_home);
mFusedLocationClient =
LocationServices.getFusedLocationProviderClient(this);
getLastLocation();
}
private boolean checkPermissions() {
if (ActivityCompat.checkSelfPermission(HomeActivity.this,
Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(HomeActivity.this,
Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
return true;
}
return false;
}
private void requestPermissions() {
ActivityCompat.requestPermissions(
HomeActivity.this,
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION},
PERMISSION_ID
);
}
private boolean isLocationEnabled() {
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(
LocationManager.NETWORK_PROVIDER
);
}
@RequiresApi(api = Build.VERSION_CODES.M)
@SuppressLint("MissingPermission")
private void getLastLocation() {
if (checkPermissions()) {
if (isLocationEnabled()) {
mFusedLocationClient.getLastLocation().addOnCompleteListener(
new OnCompleteListener<Location>() {
@Override
public void onComplete(@NonNull Task<Location> task) {
Location location = task.getResult();
if (location == null) {
requestNewLocationData();
} else {
Geocoder geocoder = new Geocoder(HomeActivity.this, Locale.getDefault());
List<Address> addresses = null;
try {
addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
} catch (IOException e) {
e.printStackTrace();
}
assert addresses != null;
if (addresses != null) {
String cityName = addresses.get(0).getAddressLine(0);
String stateName = addresses.get(0).getAddressLine(1);
String countryName = addresses.get(0).getAddressLine(2);
String[] arrOfStr = cityName.split(",");
locationTV.setText("You're in " + arrOfStr[arrOfStr.length - 2] + ", " + arrOfStr[arrOfStr.length - 1]);
}
}
}
}
);
} else {
Toast.makeText(this, "Turn on location", Toast.LENGTH_LONG).show();
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
} else {
requestPermissions();
}
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_ID) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
getLastLocation();
}
}
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onResume() {
super.onResume();
if (checkPermissions()) {
getLastLocation();
}
}
@SuppressLint("MissingPermission")
private void requestNewLocationData() {
LocationRequest mLocationRequest = new LocationRequest();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(0);
mLocationRequest.setFastestInterval(0);
mLocationRequest.setNumUpdates(1);
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
mFusedLocationClient.requestLocationUpdates(
mLocationRequest, mLocationCallback,
Looper.myLooper()
);
}
private LocationCallback mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
Location mLastLocation = locationResult.getLastLocation();
Geocoder geocoder = new Geocoder(HomeActivity.this, Locale.getDefault());
List<Address> addresses = null;
try {
addresses = geocoder.getFromLocation(mLastLocation.getLatitude(), mLastLocation.getLongitude(), 1);
} catch (IOException e) {
e.printStackTrace();
}
assert addresses != null;
if (addresses != null) {
String cityName = addresses.get(0).getAddressLine(0);
String stateName = addresses.get(0).getAddressLine(1);
String countryName = addresses.get(0).getAddressLine(2);
String[] arrOfStr = cityName.split(",");
locationTV.setText("You're in " + arrOfStr[arrOfStr.length - 2] + ", " +
arrOfStr[arrOfStr.length - 1]);
}
}
};
J'ai posté un commentaire ci-dessus
Ceci fonctionne pour moi,
i navigation à la page Paramètres lorsque je clique sur le MainAlactivité code> p> activité_main_layout.xml code> p> < Pré> xxx pré> androidmanifest.xml code> p> textview Code> sur MainAlactivité Code> et quand je appuie sur Retour à partir de paramètres de la page, je vois le Toast code> Message Hakuna Mattat code> à chaque fois. P> P>
Il existe des différences entre nos codes, votre code est juste sur une activité régulière et que le mien est sur une carte de carte qui a un fragment de carte affiché .. i Exécution du startactivityForresult code> de mon OnreQuestPerMissiSnresULT Code> Fonction Depuis que je n'ai besoin de fonctionner que si les autorisations ne sont pas accordées. Donc, je suppose que l'un de ceux-ci doit être la raison ..
Aussi j'ai vérifié et que le OnActiVIVIVIVIVIVITULT CODE> est appelé uniquement lorsque je repousserai en arrière une fois que les paramètres de localisation sont affichés .. Mais le problème est que je dois cliquer sur l'application dans la page de paramètres d'emplacement, puis autoriser l'emplacement pour C'est et si je le fais, puis appuyez sur le bouton Accueil 2 fois pour revenir à l'application, il ne revient pas et OnAstiVIVIVIVITURE code> n'est pas appelé ..
Donc, soit j'ai besoin de savoir si vous avez une option de démarrage d'une intention qui démarrera une activité qui va directement à mes paramètres spécifiques de l'emplacement d'application, puis je suppose que cela fonctionnera ou si je saurai si je saurai comment contrôler cette activité de paramètres car une fois qu'il se déplace vers les paramètres que la mapacitativty est arrêtée .. p>
Pouvez-vous supprimer ce chèque
if (résultant == Activity.Result_ok) code> et réessayez?J'ai essayé et toujours ne fonctionne pas, comme je l'ai remarqué, cela ne démarre même pas la fonction OnacvtivityResult, il ne se connecte même pas dans le journal.d que j'ai mis à la sortie de l'if (résultat == Activity.ok) @icantc
Désolé, mec, tout à fait, tout ce que je peux dire, c'est juste rester avec quelques débogage. Faire tirer quelques autres
Intention Code> et voir siOnAstiVIVIVIVITURE () CODE> est appelé ou non ou crée simplement un autre nouveau projet de démonstration et voir si tout fonctionne si tout fonctionne comme prévu.je me débats toujours avec ça .. je veux dire que j'ai vérifié tous les détails et que cela ne fonctionne toujours pas
Hey mec, je viens de créer un nouveau projet de démonstration et a tiré la même intention de la page de réglage, tout fonctionne bien.
OnActiVIVIVIVITURE () CODE> est appelé chaque fois correctement.Pouvez-vous poster votre code pour que je puisse voir?
Oui, je vais le poster comme une réponse