Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Deux activités en même temps ?

Sujet résolu
    2 juin 2013 à 11:43:28

    Bonjour, 

    Je suis débutant en programmation Android et j'essayes actuellement de créer une application simple me permettant d'obtenir la vitesse instantanée et mon altitude.

    Pour cela j'ai donc une première activité concernant la vitesse et une seconde concernant l'altitude.

    Lorsque je lance l'application (sans erreurs signalées) sur mon téléphone il n'y a qu'une seule des deux fonctions qui fonctionne : 

          _ Lorsque mon code java concernant l'ALTITUDE et en tête de page dans le fichier java, mon application me donne uniquement l'ALTITUDE.

          _Lorsque mon code java concernant la VITESSE et en tête de page dans le fichier java, mon application me donne uniquement la VITESSE.

    Voila mon soucis, je penses qu'il s'agit d'un problème au niveau du gps mais j'ai essayé de nombreuses chose sans résultats !

    Merci d'avance

    Adrien.

    • Partager sur Facebook
    • Partager sur Twitter
      2 juin 2013 à 13:09:44

      Salut, Il faudrait que tu mettes en place un LocationListener, ensuite depuis celui-ci (Regarde la doc et les tutos comment faire) tu récupères tout cela directement sur un locationManager, et pourquoi deux activités alors qu'un seul location manager suffit ?
      • Partager sur Facebook
      • Partager sur Twitter
      "Comme la lune, agrandis-toi toi-même, Soit un homme, non un morceau d'argile." Iqbal.
        2 juin 2013 à 14:42:54

        package com.example.gpstracker;
        
        /**Imports nécessaires */
        import android.location.Location;
        import android.location.LocationListener;
        import android.location.LocationManager;
        import android.os.Bundle;
        import android.app.Activity;
        import android.widget.CheckBox;
        import android.widget.EditText;
        import android.widget.TextView;
        import android.widget.Toast;
        import java.util.List;
        import android.app.AlertDialog;
        import android.content.Context;
        import android.content.DialogInterface;
        import android.util.Log;
        import android.view.View;
        import android.view.Window;
        import android.view.View.OnClickListener;
        
        
        
        
        
        
        
        
        
        
        						/**ALTITUDE*/
        
        public class MainActivity extends Activity implements OnClickListener, LocationListener{
        	private LocationManager lManager;
            private Location location;
            private String choix_source = "";
         
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
         
                /**On spécifie que l'on va avoir besoin de gérer l'affichage du cercle de chargement*/
                requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
         
                setContentView(R.layout.activity_main);
         
                /**On récupère le service de localisation*/
                lManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
         
                /**Initialisation de l'écran*/
                reinitialisationEcran();
         
                /**On affecte un écouteur d'évènement aux boutons*/
                findViewById(R.id.choix_source).setOnClickListener(this);
                findViewById(R.id.obtenir_position).setOnClickListener(this);
             
            }
         
                /**Méthode déclencher au clique sur un bouton*/
        	public void onClick(View v) {
        		switch (v.getId()) {
        		case R.id.choix_source:
        			choisirSource();
        			break;
        		case R.id.obtenir_position:
        			obtenirPosition();
        			break;
        		
        		default:
        			break;
        		}
        	}
         
        	/**Réinitialisation de l'écran*/
        	private void reinitialisationEcran(){
        
        		((TextView)findViewById(R.id.altitude)).setText("0.0");
        	
         
        		findViewById(R.id.obtenir_position).setEnabled(false);
        		
        	}
         
        	private void choisirSource() {
        		reinitialisationEcran();
         
        		/**On demande au service la liste des sources disponibles*/
        		List <String> providers = lManager.getProviders(true);
        		final String[] sources = new String[providers.size()];
        		int i =0;
        		/**On stock le nom de ces source dans un tableau de string*/
        		for(String provider : providers)
        			sources[i++] = provider;
         
        		/**On affiche la liste des sources dans une fenêtre de dialogue*/
        		new AlertDialog.Builder(MainActivity.this)
        		.setItems(sources, new DialogInterface.OnClickListener() {
        			public void onClick(DialogInterface dialog, int which) {
        				findViewById(R.id.obtenir_position).setEnabled(true);
        				//on stock le choix de la source choisi
        				choix_source = sources[which];
        				
        			}
        		})
        		.create().show();
        	}
         
        	private void obtenirPosition() {
        		/**On démarre le cercle de chargement*/
        		setProgressBarIndeterminateVisibility(true);
         
        		/**On demande au service de localisation de nous notifier tout changement de position
        		sur la source (le provider) choisie, toute les minutes (60000millisecondes).
        		Le paramètre this spécifie que notre classe implémente LocationListener et recevra
        		les notifications*/
        		lManager.requestLocationUpdates(choix_source, 60000, 0, this);
        	}
         
        	private void afficherLocation() {
        		/**On affiche les informations de la position a l'écran*/
        
        		((TextView)findViewById(R.id.altitude)).setText(String.valueOf(location.getAltitude()));
        	}
         
        	
         
        	public void onLocationChanged(Location location) {
        		/**Lorsque la position change...*/
        		Log.i("Tuto géolocalisation", "La position a changé.");
        		/**... on stop le cercle de chargement*/
        		setProgressBarIndeterminateVisibility(false);
        	
        		/**... on sauvegarde la position*/
        		this.location = location;
        		/**... on l'affiche*/
        		afficherLocation();
        		/**... et on spécifie au service que l'on ne souhaite plus avoir de mise à jour*/
        		lManager.removeUpdates(this);
        	}
         
        	public void onProviderDisabled(String provider) {
        		/**Lorsque la source (GSP ou réseau GSM) est désactivé*/
        		Log.i("Tuto géolocalisation", "La source a été désactivé");
        		/**...on affiche un Toast pour le signaler à l'utilisateur*/
        		Toast.makeText(MainActivity.this,
        				String.format("La source \"%s\" a été désactivé", provider),
        				Toast.LENGTH_SHORT).show();
        		/**... et on spécifie au service que l'on ne souhaite plus avoir de mise à jour*/
        		lManager.removeUpdates(this);
        		/**... on stop le cercle de chargement*/
        		setProgressBarIndeterminateVisibility(false);
        	}
         
        	public void onProviderEnabled(String provider) {
        		Log.i("Tuto géolocalisation", "La source a été activé.");
        	}
        	public void onStatusChanged(String provider, int status, Bundle extras) {
        		Log.i("Tuto géolocalisation", "Le statut de la source a changé.");
        	}
        }
         
        
        
        
        
        
        
        					/**VITESSE*/
        
        final class activity_main extends Activity {
        	/** déclare la variable locationManageron ( gestion de la localisation) */
        	LocationManager locationManager;
        	
        	/** on crée une instance pour l'écoute */
        	private LocationListener  gps=new MajListener();
        	
        	/** déclare les éléments d'affichage*/
        	TextView tVitesse = null;
        	CheckBox CheckKm = null;
        	EditText EditText = null;
        	
        	/** déclare la variable vitesse, c'est un nombre réel*/
        	float fVitesse=0;
        	
        	/** Fonction à  l'ouverture du programme */
        	public void onCreate(Bundle savedInstanceState) {
        	super.onCreate(savedInstanceState);
        	
        	/**on repére l'affiche associé au xml*/
        	setContentView(R.layout.activity_main);
        	
        	/** On défini le systeme de positionnement gps (d'autres méthodes de localisation existent*/
        	locationManager = (LocationManager) getSystemService("location");
        	
        	/** On lance l'actualisation du gps*/
        	locationManager.requestLocationUpdates("gps", 10,0, gps);
        	
        	/** On identifie les éléments xml*/
            tVitesse = (TextView)findViewById(R.id.vitesse);
            CheckKm = (CheckBox)findViewById(R.id.checkBox1);
        
                 }
        	
        	
        	public void majCoordonnes() {
        		
        		boolean option;
        		/** on répére la dernière la position */
        		Location location = locationManager.getLastKnownLocation("gps");
        		
        		/** On évite les plantages par ce test */
        		if (location != null) { 
        			
        			/** on recupére la vitesse */
        			fVitesse =  location.getSpeed();
        			
        			/** on vérifie le checkbox en km */
        			option=CheckKm.isChecked();
        			if (option==true){
        				
        				fVitesse = fVitesse * 3.6f ;
        			}
        			
        			/** on actualise l'affichage */
        			tVitesse.setText(String.valueOf(Math.round(fVitesse)));
        		} 
        		}
        	
        	/** On crée un objet qui va écouter le gps */
        	class MajListener implements android.location.LocationListener { 
        		public void onLocationChanged(Location location) { 
        		majCoordonnes(); 
        		}
        		public void onProviderDisabled(String provider){
        			
        	/** votre traitement */
        		}
        		public void onProviderEnabled(String provider){
        		}
        		public void onStatusChanged(String provider, int status, Bundle extras){
        		}
        	}
        	@Override
        	/** Lorsque l'on quitte l'application, on éteint le gps et on fait un peu de pub... */
        	public void onDestroy() {
        		 Toast.makeText( this, "Réalisé par Adrien, Gabriel & Swann dans le cadre de l'ISN Bellepierre", Toast.LENGTH_LONG ).show();
        		 locationManager.removeUpdates(gps);
        		 super.onDestroy();
        	     finish(); }
        	     
        } 
        • Partager sur Facebook
        • Partager sur Twitter
          2 juin 2013 à 14:48:59

          Salut, 

          Merci de ta réponse

          Les location listener et location manager y sont déjà. Actuellement mon soucis est que le gps s'active pour indiquer l'altitude (lorsque j'appuies sur mon bouton  "Obtenir position") mais se désactiver ensuite et empêche donc l'affichage de la vitesse.

          Voici mon code Java

          Il y a quelques incohérences dedans (je fais deux fois appel au service de localisation, pour la vitesse ET pour l'altitude) mais je ne sais pas comment faire pour tout faire correspondre.

          Merci 

          • Partager sur Facebook
          • Partager sur Twitter
            2 juin 2013 à 15:21:17

            Oui, tu t'y prends vraiment mal, ta deuxième classe ne sert à rien car du même location listener tu peux récupérer tes deux informations, si vraiment tu veux deux affichages différents, crée deux activités et passe les informations de ta vitesse dans un intent vers ta seconde activité qui fera l'affichage.

            • Partager sur Facebook
            • Partager sur Twitter
            "Comme la lune, agrandis-toi toi-même, Soit un homme, non un morceau d'argile." Iqbal.
              2 juin 2013 à 20:16:37

              Problème Résolu ! 

              Merci à toi

              • Partager sur Facebook
              • Partager sur Twitter

              [Android] Deux activités en même temps ?

              × 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