Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème au niveau d'un code correct syntaxiquemen

Programmation en javaAndroid

    27 mars 2023 à 13:26:35

    Bonjour j'ai un souci au niveau de mon code ; ça fait 1 semaine que je bloque au niveau de la fonction sensée retourner une chaine de caractères contenant la longitude, la latitude et l'altitude d'un Android.

    L'appli possède deux fonctions : 

    Afficher les coordonnées (Ca fonctionne)

    Envoyer un message(La méthode d'envoi fonctionne mais la méthode getCoordonneesGps ne retourne rien)

    Le code suivant est sensé envoyer un message dès qu'on appuie sur un bouton (Layout cohérent). 

     Voici mon code : 

    import android.Manifest;
    import android.annotation.SuppressLint;
    import android.content.Context;
    import android.content.pm.PackageManager;
    import android.location.Address;
    import android.location.Geocoder;
    import android.location.Location;
    import android.os.Bundle;

    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;

    import android.telephony.SmsManager;
    import android.view.View;

    import androidx.core.app.ActivityCompat;
    import androidx.core.content.ContextCompat;

    import android.location.*;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;

    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    import java.util.Locale;
    import java.util.SimpleTimeZone;


    public class MainActivity extends AppCompatActivity implements LocationListener {

    LocationManager locationManager; //Fournisseur de localisation
    private TextView texte_view1, texte_view2, texte_view3, texte_view4;
    private static final int code = 200; //Request code = 200
    private double altitude;

    // 2.Initialisation des attributs responsables de l'envoi du SMS d'urgence
    private Button messageEnvoi;
    private EditText numTel;
    private static String messageAlerte;

    //Méthodes
    @Override
    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Attribution des variables
    // 1. Initialisation des attributs ressponsables de la localisation du GPS
    //bouton1 correpond au bouton utilisé pour l'affichage des coordonnées GPS
    Button bouton1 = findViewById(R.id.boutton_location);
    texte_view1 = findViewById(R.id.texte_view);
    texte_view2 = findViewById(R.id.texte2_view);
    texte_view3 = findViewById(R.id.texte3_view);
    texte_view4 = findViewById(R.id.texte4_view);

    if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    /* Affichage : ACCEPTER ou REFUSER l'autorisation
    Si l'application non autorisée : autorisation demandée.

    */
    ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, code);
    }

    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.SEND_SMS}, PackageManager.PERMISSION_GRANTED);

    bouton1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    //Méthode privée permettant de vérifier si l'application est bien autorisée à utiliser la localisation de l'appareil.
    Localisation();
    }
    });
    //Appel de la méthode responsable de l'envoi du message
    activiteInitialise();
    }

    //1. Méthodes responsables de la localisation GPS de l'appli
    @SuppressLint("MissingPermission")
    private void Localisation() {

    try {
    locationManager = (LocationManager) getApplicationContext().getSystemService(LOCATION_SERVICE);
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, MainActivity.this);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }

    @Override
    public void onLocationChanged(@NonNull Location location) {
    Toast.makeText(this, "" + location.getLatitude() + ", " + location.getLongitude(), Toast.LENGTH_SHORT).show();
    try {
    Geocoder geocoder = new Geocoder(MainActivity.this, Locale.getDefault());
    List<Address> addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
    //Intégration de la LATITUDE dans le TextView
    //Variables stockant les coordonnées GPS
    double latitude = addresses.get(0).getLatitude();
    double longitude = addresses.get(0).getLongitude();
    String localite = addresses.get(0).getLocality();
    String pays = addresses.get(0).getCountryName();
    String latitude_donnee = "Latitude : " + latitude + "";
    String longitude_donnee = "Longitude : " + longitude + "";

    //Intégration de la LATITUDE dans le TextView

    texte_view1.setText(latitude_donnee);
    //Intégration de la LONGITUDE dans le TextView

    texte_view2.setText(longitude_donnee);
    //Integration du Pays dans le TextView

    texte_view3.setText("Pays : " + pays);
    texte_view4.setText("Localité : " + addresses.get(0).getLocality() + "");
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    //2. Méthodes responsable de l'envoi d'un message d'urgence
    public void activiteInitialise() {
    //Synchronisation des attirbuts avec les objets graphiques présents au niveau du Layout
    numTel = (EditText) findViewById(R.id.txtPhone);
    String messageSms = "";
    messageEnvoi = (Button) findViewById(R.id.btnEnvoi);
    instanceClicBoutonEnvoi();
    }

    private String getCoordonneesGps()
    {
    String coordonnes = "";
    // Vérifier si les permissions GPS sont accordées

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
    == PackageManager.PERMISSION_GRANTED)
    {
    // Obtenir le fournisseur de localisation
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Location location = null;

    // Obtenir la dernière localisation connue
    if (locationManager != null)
    {
    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    }

    // Si une localisation est trouvée
    if (location != null)
    {
    // Obtenir les coordonnées GPS
    double latitude = location.getLatitude();
    double longitude = location.getLongitude();
    double altitude = location.getAltitude();
    Date instant = new Date();
    @SuppressLint("SimpleDateFormat") SimpleDateFormat heure = new SimpleDateFormat("HHmmss");
    String chaineHeure = heure.format(instant);
    // Créer la chaîne de caractères avec les coordonnées GPS
    coordonnes = ("---URGENCES SAFETREK---\n\nAu momement : "+ chaineHeure +"Voici mes coordonnées GPS à prendre en compte/transemttre : " + "\n\nLatitude : "+ latitude+"\nLongitude : "+longitude+"\nAltitude: "+altitude+"\n\n**********");
    }
    }
    else
    {
    // Si les permissions GPS ne sont pas accordées, demander à l'utilisateur de les accorder
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
    }

    return coordonnes;

    }

    public void instanceClicBoutonEnvoi() {
    String coordooneesGps = getCoordonneesGps();
    if (!coordooneesGps.isEmpty()) {
    messageEnvoi.setOnClickListener(new Button.OnClickListener() {
    //Lorqu'il y aura un clic sur le bouton. Il y a execution du code présent dans les accolades.
    public void onClick(View vue) {
    if (numTel != null) {
    SmsManager.getDefault().sendTextMessage(numTel.getText().toString(), null, coordooneesGps, null, null);
    }
    }
    });
    }
    }
    }
    • Partager sur Facebook
    • Partager sur Twitter
      27 mars 2023 à 19:22:41

      Bonjour, Évitez les titres avec "problème",  si vous postez on se doute que vous avez un problème inutile de l'indiquer dans le titre car cela ne donne aucune information supplémentaire quant au contenu du sujet.

      Après avoir cliquer sur le bouton code </>, il faut choisir le bon langage dans la liste proposée affin d'activer la bonne coloration syntaxique du forum.

      Je déplace dans le forum JAVA.

      Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Merci de colorer votre code à l'aide du bouton Code

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: java;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      Liens conseillés

      -
      Edité par AbcAbc6 27 mars 2023 à 19:24:54

      • Partager sur Facebook
      • Partager sur Twitter
        28 mars 2023 à 9:04:47

        Bonjour,

        Si tu passes dans le else de ton premier if, tu demandes à l'utilisateur d'accorder les permissions mais tu ne set pas la variable coordonnes qui reste à "".
        As-tu essayé de DEBUG pour voir où tu passes dans ta fonction pour qu'elle ne te retourne "rien" ?

        • Partager sur Facebook
        • Partager sur Twitter
        Don't quit, suffer now and live the rest of your life as a Champion

        Problème au niveau d'un code correct syntaxiquemen

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown