|
| 1 | +package com.example.tracking_ble |
| 2 | + |
| 3 | +import android.app.IntentService |
| 4 | +import android.content.Intent |
| 5 | +import android.location.Address |
| 6 | +import android.location.Geocoder |
| 7 | +import android.location.Location |
| 8 | +import android.os.Bundle |
| 9 | +import android.os.ResultReceiver |
| 10 | +import android.util.Log |
| 11 | +import java.util.* |
| 12 | + |
| 13 | +// Service d'intention pour obtenir une adresse à partir de coordonnées géographiques |
| 14 | +class GetAddressIntentService : IntentService(IDENTIFIER) { |
| 15 | + private var addressResultReceiver: ResultReceiver? = null |
| 16 | + |
| 17 | + // Méthode appelée lors de la réception d'une intention |
| 18 | + override fun onHandleIntent(intent: Intent?) { |
| 19 | + val msg: String |
| 20 | + // Récupérer le destinataire des résultats de l'adresse depuis l'intention |
| 21 | + addressResultReceiver = Objects.requireNonNull(intent)!!.getParcelableExtra("add_receiver") |
| 22 | + |
| 23 | + // Vérifier si le destinataire des résultats est null |
| 24 | + if (addressResultReceiver == null) { |
| 25 | + Log.e("GetAddressIntentService", "Aucun destinataire, la demande ne peut pas être traitée") |
| 26 | + return |
| 27 | + } |
| 28 | + |
| 29 | + // Récupérer les coordonnées géographiques depuis l'intention |
| 30 | + val location = intent!!.getParcelableExtra<Location>("add_location") |
| 31 | + |
| 32 | + // Vérifier si les coordonnées géographiques sont null |
| 33 | + if (location == null) { |
| 34 | + msg = "Aucune localisation, impossible de continuer sans localisation" |
| 35 | + sendResultsToReceiver(0, msg) |
| 36 | + return |
| 37 | + } |
| 38 | + |
| 39 | + // Géocodeur pour obtenir l'adresse à partir des coordonnées |
| 40 | + val geoCoder = Geocoder(this, Locale.getDefault()) |
| 41 | + var addresses: List<Address>? = null |
| 42 | + try { |
| 43 | + addresses = geoCoder.getFromLocation(location.latitude, location.longitude, 1) |
| 44 | + } catch (ioException: Exception) { |
| 45 | + Log.e("", "Erreur lors de l'obtention de l'adresse pour la localisation") |
| 46 | + } |
| 47 | + |
| 48 | + // Vérifier si aucune adresse n'a été trouvée |
| 49 | + if (addresses == null || addresses.isEmpty()) { |
| 50 | + msg = "Aucune adresse trouvée pour la localisation" |
| 51 | + sendResultsToReceiver(1, msg) |
| 52 | + } else { |
| 53 | + val address = addresses[0] |
| 54 | + // Détails de l'adresse formatés |
| 55 | + val addressDetails = """ |
| 56 | + ${address.featureName} |
| 57 | + ${address.thoroughfare} |
| 58 | + Localité: ${address.locality} |
| 59 | + Comté: ${address.subAdminArea} |
| 60 | + État: ${address.adminArea} |
| 61 | + Pays: ${address.countryName} |
| 62 | + Code postal: ${address.postalCode} |
| 63 | + """.trimIndent() |
| 64 | + sendResultsToReceiver(2, addressDetails) |
| 65 | + } |
| 66 | + } |
| 67 | + |
| 68 | + // Méthode pour envoyer les résultats au destinataire |
| 69 | + private fun sendResultsToReceiver(resultCode: Int, message: String) { |
| 70 | + val bundle = Bundle() |
| 71 | + bundle.putString("address_result", message) |
| 72 | + addressResultReceiver!!.send(resultCode, bundle) |
| 73 | + } |
| 74 | + |
| 75 | + // Objet compagnon pour l'identifiant du service |
| 76 | + companion object { |
| 77 | + private const val IDENTIFIER = "GetAddressIntentService" |
| 78 | + } |
| 79 | +} |
0 commit comments