IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windev Mobile Discussion :

Comment intégrer un listener Android dans WINDEV MOBILE


Sujet :

Windev Mobile

  1. #1
    Membre émérite
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Par défaut Comment intégrer un listener Android dans WINDEV MOBILE
    Bonjour,

    L'interface GPS de WINDEV MOBILE ne permettant pas d'accéder aux informations "fines" du GPS, je désire créer une procédure Java pour avoir ces infos.

    Dans Android, cela passe par la création de deux listeners (donc asynchrones)
    - un pour le location update
    - l'autre pour le statut du GPS

    Dans une procédure Java native, j'ai donc créé deux méthodes ayant pour but de répondre à ce type d'événement (location update et changement du status du GPS).

    Le souci que je rencontre maintenant, c'est comment puis-je transférer les informations vues par ces listeners vers mon programme Windev Mobile ? J'ai essayé de passer par une écriture dans un champ de la fenêtre (avec un getView préalable), mais visiblement cela plante .....

    Voici mon code

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    /////
    import android.location.GpsSatellite;
    import android.location.GpsStatus;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.GpsStatus.*;
    import android.location.LocationManager;
    import android.content.*;
    import java.util.Iterator;
     
    import android.util.Log;
    import android.widget.TextView;
     
    public static void Location_listener()
    {
    	///////////////////////////////////////////
    	// écriture
    	TextView myTextView;
    	myTextView = (TextView) getView ("LIB_log");
    	myTextView.setText("avant init listener");
     
     
    	////////////////////////////////////
    	// Récupération du contexte et du location manager
    	Context myContext     = getContexteApplication();
    	LocationManager mylocationManager = (LocationManager) myContext.getSystemService(Context.LOCATION_SERVICE);	
     
    	//////////////////////////////////////////
    	// Define a listener that responds to location updates
    	LocationListener mylocationListener = new LocationListener() {
    		public void onLocationChanged(Location location) {
    			// Called when a new location is found by the network location provider.
    			TextView myTextView;
    			myTextView = (TextView) getView ("LIB_log");
    			myTextView.setText("onLocationChanged");
    		}
     
    		public void onStatusChanged(String provider, int status, Bundle extras) {
    			TextView myTextView;
    			myTextView = (TextView) getView ("LIB_log");
    			myTextView.setText("onStatusChanged");
     
    		}
     
    		public void onProviderEnabled(String provider) {
    			TextView myTextView;
    			myTextView = (TextView) getView ("LIB_log");
    			myTextView.setText("onProviderEnabled");
     
    		}
     
    		public void onProviderDisabled(String provider) {
    			TextView myTextView;
    			myTextView = (TextView) getView ("LIB_log");
    			myTextView.setText("onProviderDisabled");
     
    		}
    	};
    	//////////////////////////////////////
     
    	///////////////////////////////////////
    	// Define a listener that responds to GPS STATUS
    	GpsStatus.Listener mygpsStatusListener = new GpsStatus.Listener() {
    		public void onGpsStatusChanged(int event){
     
    // plantage si on essaye d'afficher le texte 
    //			TextView myTextView;
    //			myTextView = (TextView) getView ("LIB_log");
    //			myTextView.setText("event !!!!!!! ");
     
     
    		}
    	};
     
    	///////////////////////////////////////
     
     
    	// Register the listener with the Location Manager to receive location updates
    	mylocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mylocationListener);
    	mylocationManager.addGpsStatusListener(mygpsStatusListener);
    	myTextView.setText("apres init listener");
     
     
    }

  2. #2
    Membre émérite
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Par défaut
    Je me réponds à moi-même ! comme d'hab ...

    PAS MOYEN D'AVOIR UN LISTENER !!!!

    Conclusion : j'ai fait une application qui scan la loc et le statut du GPS et je vous indique ici comment faire ...

    Il faut créer 4 procédures java native et les appeler dans une appli WM16

    - pour vérifier si le GPS est activé
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.SystemClock;
     
     
    /////
    import android.location.GpsSatellite;
    import android.location.GpsStatus;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.GpsStatus.*;
    import android.location.LocationManager;
    import android.content.*;
    import java.util.Iterator;
     
    import android.util.Log;
    import android.widget.TextView;
     
    public static boolean isGpsEnabled()
    {
    	boolean test_GPS;
     
    	////////////////////////////////////
    	// Récupération du contexte et du location manager
    	Context myContext     = getContexteApplication();
    	LocationManager mylocationManager = (LocationManager) myContext.getSystemService(Context.LOCATION_SERVICE);	
     
    	// récupère isGPSenabled
    	test_GPS = mylocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
     
    	return test_GPS;
     
    }

    - pour initialiser le GPS (en fait on crée des listeners qui ne font rien !!!)

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.SystemClock;
     
     
    /////
    import android.location.GpsSatellite;
    import android.location.GpsStatus;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.GpsStatus.*;
    import android.location.LocationManager;
    import android.content.*;
    import java.util.Iterator;
     
    import android.util.Log;
    import android.widget.TextView;
     
    public static void initGps()
    {
     
    	////////////////////////////////////
    	// Récupération du contexte et du location manager
    	Context myContext     = getContexteApplication();
    	LocationManager mylocationManager = (LocationManager) myContext.getSystemService(Context.LOCATION_SERVICE);	
     
    	//////////////////////////////////////////
    	// Define a listener that responds to location updates
    	LocationListener mylocationListener = new LocationListener() {
     
    		// lancement à vide
    		public void onLocationChanged(Location location) {
    			// Called when a new location is found by the network location provider.
    			// ne fait rien
    		}
     
    		public void onStatusChanged(String provider, int status, Bundle extras) {
    			// ne fait rien
    		}
     
    		public void onProviderEnabled(String provider) {
    			// ne fait rien
    		}
     
    		public void onProviderDisabled(String provider) {
    			// ne fait rien
    		}
     
    	};
    	//////////////////////////////////////
     
    	///////////////////////////////////////
    	// Define a listener that responds to GPS STATUS
    	GpsStatus.Listener mygpsStatusListener = new GpsStatus.Listener() {
     
    		// lancement à vide
     
    		public void onGpsStatusChanged(int event){
     
    			// ne fait rien
     
    		}
     
    	};
     
    	///////////////////////////////////////
     
     
    	// Register the listener with the Location Manager to receive location updates
    	mylocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mylocationListener);
    	mylocationManager.addGpsStatusListener(mygpsStatusListener);
     
     
    }

    - pour scanner le status du GPS (dans WM16 on crée un timer sur une fonction qui va appeler régulièrement cette fonction native) : elle renvoie le status dans un String ....
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.SystemClock;
    /////
    import android.location.GpsSatellite;
    import android.location.GpsStatus;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.GpsStatus.*;
    import android.location.LocationManager;
    import android.content.*;
    import java.util.Iterator;
     
    import android.util.Log;
    import android.widget.TextView;
     
    // status
    // max_sats;time_to_first_fix;nb_sats;nb_sats_fixed;snr;azimuth;elevation;fix/pasfix;
     
    public static String getGpsStatus()
    {
     
    		//
    		String chaine_status ="";
     
    		////////////////////////////////////
    		// Récupération du contexte et du location manager
    		Context myContext     = getContexteApplication();
    		LocationManager mylocationManager = (LocationManager) myContext.getSystemService(Context.LOCATION_SERVICE);	
     
    		int nb_sats;
    		int nb_sats_fixed;
    		int snr;
    		int prn;
    		int azimuth;
    		int elevation;
    		int max_sats;
    		int time_to_first_fix;
    		Iterator<GpsSatellite> iterator_sats;
    		GpsSatellite sat_courant;
     
    		// récupération de GPSStatus
    		GpsStatus xGpsStatus = mylocationManager.getGpsStatus(null) ;
     
    		// nombre de sats max
    		max_sats = xGpsStatus.getMaxSatellites() ;
    		chaine_status = chaine_status.concat(String.valueOf(max_sats));
    		chaine_status = chaine_status.concat(";");
     
    		// time to first fix
    		time_to_first_fix = xGpsStatus.getTimeToFirstFix() ;
    		chaine_status = chaine_status.concat(String.valueOf(time_to_first_fix));
    		chaine_status = chaine_status.concat(";");
     
    		// recupération des satellites
    		Iterable<GpsSatellite> iSatellites = xGpsStatus.getSatellites() ;
     
    		////////////////////////////
    		// 1er parcours des satellites
    		iterator_sats = iSatellites.iterator() ;
    		nb_sats = 0 ;                                   // Satellite Count
    		nb_sats_fixed = 0 ;								// Count satellites used in fix
    		/////////////////////////
     
    		/////////////////////
    		// 1er parcours des satellites
    		while ( iterator_sats.hasNext() )
    		{
    				// saut au suivant 
    				sat_courant = (GpsSatellite) iterator_sats.next() ;
     
    				// nombre
    				nb_sats = nb_sats + 1 ;
     
    				// SNR
    				snr = (int) sat_courant.getSnr();
     
    				// position
    				azimuth = (int) sat_courant.getAzimuth();
    				elevation = (int) sat_courant.getElevation();
     
    				// nb sat accroché
    				if ( sat_courant.usedInFix() ) {
    						nb_sats_fixed = nb_sats_fixed + 1;
    					}
     
    			}
     
    		// sauvegarde nombre sats
    		chaine_status = chaine_status.concat(String.valueOf(nb_sats));
    		chaine_status = chaine_status.concat(";");
     
    		// sauvegarde nombre sats fix
    		chaine_status = chaine_status.concat(String.valueOf(nb_sats_fixed));
    		chaine_status = chaine_status.concat(";");	
     
    		/////////////////////
    		// 2eme parcours des satellites pour avoir le nombre
    		iterator_sats = iSatellites.iterator() ;
    		nb_sats = 0 ;                                   // Satellite Count
    		nb_sats_fixed = 0 ;								// Count satellites used in fix
     
    		///////////////////////////
    		// parcours des satellites
    		while ( iterator_sats.hasNext() )
    		{
    				// saut au suivant 
    				sat_courant = (GpsSatellite) iterator_sats.next() ;
     
    				// nombre
    				nb_sats = nb_sats + 1 ;
     
    				// PRN
    				prn = (int) sat_courant.getPrn();
    				chaine_status = chaine_status.concat(String.valueOf(prn));
    				chaine_status = chaine_status.concat(";");	
     
     
    				// SNR
    				snr = (int) sat_courant.getSnr();
    				chaine_status = chaine_status.concat(String.valueOf(snr));
    				chaine_status = chaine_status.concat(";");	
     
    				// position
    				azimuth = (int) sat_courant.getAzimuth();
    				chaine_status = chaine_status.concat(String.valueOf(azimuth));
    				chaine_status = chaine_status.concat(";");	
     
    				elevation = (int) sat_courant.getElevation();
    				chaine_status = chaine_status.concat(String.valueOf(elevation));
    				chaine_status = chaine_status.concat(";");	
     
    				// nb sat accroché
    				if ( sat_courant.usedInFix() ) {
    					nb_sats_fixed = nb_sats_fixed + 1;
    					chaine_status = chaine_status.concat("fix");
    					chaine_status = chaine_status.concat(";");			
    					}
    				else {
    					chaine_status = chaine_status.concat("pasfix");
    					chaine_status = chaine_status.concat(";");			
    				};
     
    			};
    		///////////////////////////
     
    	return chaine_status;
     
     
    }

    - pour scanner la loc (même principe que pour le status ...) : on renvoie "location_NULL" si pas de loc ....
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.SystemClock;
     
     
    /////
    import android.location.GpsSatellite;
    import android.location.GpsStatus;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.GpsStatus.*;
    import android.location.LocationManager;
    import android.content.*;
    import java.util.Iterator;
     
    import android.util.Log;
    import android.widget.TextView;
     
    // location
    // 	 hasAccuracy (y/n);int myAccuracy; hasAltitude; myAltitude;  hasBearing;myBearing; myLatitude;myLongitude; hasSpeed;mySpeed; myTime;
     
    public static String getLastKnownLocation()
    {
    	// variables
    	String chaine_status ="";
    	Location myLocation;
     
    	int myAccuracy;
    	boolean hasmyAccuracy;
     
    	int myAltitude;
    	boolean hasmyAltitude;
     
    	int myBearing;
    	boolean hasmyBearing;
     
    	int myLatitude;
    	int myLongitude;
     
    	int mySpeed;
    	boolean hasmySpeed;
     
    	long myTime;
     
    	////////////////////////////////////
    	// Récupération du contexte et du location manager
    	Context myContext     = getContexteApplication();
    	LocationManager mylocationManager = (LocationManager) myContext.getSystemService(Context.LOCATION_SERVICE);	
     
    	// récupère Location
    	myLocation = mylocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
     
    	if ( myLocation != null ) {
     
    		// recupére infos
     
    		// Accuracy
    		hasmyAccuracy = myLocation.hasAccuracy();
    		if (hasmyAccuracy){
    			chaine_status = chaine_status.concat("y");
    			chaine_status = chaine_status.concat(";");		
    			myAccuracy = (int) myLocation.getAccuracy();
    		}
    		else {
    			chaine_status = chaine_status.concat("n");
    			chaine_status = chaine_status.concat(";");	
    			myAccuracy = 0;			
    		};
    		chaine_status = chaine_status.concat(String.valueOf(myAccuracy));
    		chaine_status = chaine_status.concat(";");
     
    		// Altitude
    		hasmyAltitude = myLocation.hasAltitude();
    		if (hasmyAltitude){
    					chaine_status = chaine_status.concat("y");
    					chaine_status = chaine_status.concat(";");		
    					myAltitude = (int) myLocation.getAltitude();
    					}
    		else {
    				chaine_status = chaine_status.concat("n");
    				chaine_status = chaine_status.concat(";");				
    				myAltitude = 0;
    			};
    		chaine_status = chaine_status.concat(String.valueOf(myAltitude));
    		chaine_status = chaine_status.concat(";");
     
    		// Bearing
    		hasmyBearing = myLocation.hasBearing();
    		if (hasmyBearing){
    					chaine_status = chaine_status.concat("y");
    					chaine_status = chaine_status.concat(";");
    					myBearing = (int) myLocation.getBearing();		
    			}
    		else {
    					chaine_status = chaine_status.concat("n");
    					chaine_status = chaine_status.concat(";");
    					myBearing = 0;				
    			};
    		chaine_status = chaine_status.concat(String.valueOf(myBearing));
    		chaine_status = chaine_status.concat(";");
     
    		// Latitude et longitude
    		myLatitude = (int) (myLocation.getLatitude()*1000000000);
    		myLongitude = (int) (myLocation.getLongitude()*1000000000);
     
    		// Speed
    		hasmySpeed = myLocation.hasSpeed();
    		if (hasmySpeed){
    				chaine_status = chaine_status.concat("y");
    				chaine_status = chaine_status.concat(";");
    				mySpeed = (int) myLocation.getSpeed();
    			}
    		else {
    				chaine_status = chaine_status.concat("n");
    				chaine_status = chaine_status.concat(";");				
    				mySpeed = 0;
    			};
    		chaine_status = chaine_status.concat(String.valueOf(mySpeed));
    		chaine_status = chaine_status.concat(";");
     
    		// time	
    		myTime = myLocation.getTime();
    		chaine_status = chaine_status.concat(String.valueOf(myTime));
    		chaine_status = chaine_status.concat(";");
     
    		/////////////	
     
    	}
     
    	else {		
    		chaine_status = chaine_status.concat("location_NULL");
    	}
     
     
    	return chaine_status;
    }

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Par défaut recupération des coordonnées
    Bonsoir courdi95,

    j'ai intégré tes fonctions dans mon appli wm15, tout fonctionne bien sauf que je ne retrouve pas la latitude et la longitude dans le retour de la fonction getLastKnownLocation().

    la fonction me retourne des chaines du genre :

    y;4;y;58;y;237;y;1;1319305534000;

    merci d'avance pour ton aide

  4. #4
    Membre émérite
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Par défaut
    Le format des messages remontés vers WM est indiqué dans les commentaires de l'exemple :

    Rappel : dans WM les méthodes appelées ne peuvent renvoyer que des éléments basisques (int, float ou chaine). J'ai choisi une chaine ...

    // hasAccuracy (y/n);int myAccuracy; hasAltitude; myAltitude; hasBearing;myBearing; myLatitude;myLongitude; hasSpeed;mySpeed; myTime;

    Dans ton cas "y;4;y;58;y;237;y;1;1319305534000;"

    hasAccuracy : y
    Accuracy : 4 mètres
    hasAltitude : y
    Altitude : 58 mètres
    hasBearing : y
    Bearing : 247° (tu devais être en mouvement ...)
    myLatitude : 1319305534000/1000000000 ..... effectivement ..... Et il manque aussi la vitesse ....

    Regarde si le code est correct ....


    et il manque la longitude .....

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Par défaut
    je ne connait pas bien javascript et au risque de dire une bêtise j'ai l'impression que dans le code qui scanne la localisation la chaine retourné n'est pas rempli avec la latitude et la longitude. ( du moins dans le code que tu propose sur le forum parce que j'ai testé ton appli elle marche super bien)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    // Latitude et longitude
    		myLatitude = (int) (myLocation.getLatitude()*1000000000);
    		myLongitude = (int) (myLocation.getLongitude()*1000000000);
    merci d'avance

  6. #6
    Membre émérite
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Par défaut
    Oups .....

    Effectivement, j'ai corrigé mon soft, mais pas ici !!!

    PS : je n'ai pas pu faire la correction dans mon post initial ....

    Voici le code corrigé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.SystemClock;
     
     
    /////
    import android.location.GpsSatellite;
    import android.location.GpsStatus;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.GpsStatus.*;
    import android.location.LocationManager;
    import android.content.*;
    import java.util.Iterator;
     
    import android.util.Log;
    import android.widget.TextView;
     
    // location
    /////////////////
    // message renvoyé : 
    // 	 hasAccuracy (y/n);int myAccuracy; hasAltitude; myAltitude;  hasBearing;myBearing; myLatitude;myLongitude; hasSpeed;mySpeed; myTime;
    // ou "location_NULL"
    /////////////////
     
    public static String getLastKnownLocation()
    {
    	// variables
    	String chaine_status ="";
    	Location myLocation;
     
    	int myAccuracy;
    	boolean hasmyAccuracy;
     
    	int myAltitude;
    	boolean hasmyAltitude;
     
    	int myBearing;
    	boolean hasmyBearing;
     
    	double myLatitude;
    	double myLongitude;
     
    	int mySpeed;
    	boolean hasmySpeed;
     
    	long myTime;
     
    	////////////////////////////////////
    	// Récupération du contexte et du location manager
    	Context myContext     = getContexteApplication();
    	LocationManager mylocationManager = (LocationManager) myContext.getSystemService(Context.LOCATION_SERVICE);	
     
    	// récupère Location
    	myLocation = mylocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
     
    	if ( myLocation != null ) {
     
    		// recupére infos
     
    		// Accuracy
    		// 1
    		hasmyAccuracy = myLocation.hasAccuracy();
    		if (hasmyAccuracy){
    			chaine_status = chaine_status.concat("y");
    			chaine_status = chaine_status.concat(";");		
    			myAccuracy = (int) myLocation.getAccuracy();
    		}
    		else {
    			chaine_status = chaine_status.concat("n");
    			chaine_status = chaine_status.concat(";");	
    			myAccuracy = 0;			
    		};
    		//2
    		chaine_status = chaine_status.concat(String.valueOf(myAccuracy));
    		chaine_status = chaine_status.concat(";");
     
    		// Altitude
    		// 3
    		hasmyAltitude = myLocation.hasAltitude();
    		if (hasmyAltitude){
    					chaine_status = chaine_status.concat("y");
    					chaine_status = chaine_status.concat(";");		
    					myAltitude = (int) myLocation.getAltitude();
    					}
    		else {
    				chaine_status = chaine_status.concat("n");
    				chaine_status = chaine_status.concat(";");				
    				myAltitude = 0;
    			};
    		// 4
    		chaine_status = chaine_status.concat(String.valueOf(myAltitude));
    		chaine_status = chaine_status.concat(";");
     
    		// Bearing
    		// 5 
    		hasmyBearing = myLocation.hasBearing();
    		if (hasmyBearing){
    					chaine_status = chaine_status.concat("y");
    					chaine_status = chaine_status.concat(";");
    					myBearing = (int) myLocation.getBearing();		
    			}
    		else {
    					chaine_status = chaine_status.concat("n");
    					chaine_status = chaine_status.concat(";");
    					myBearing = 0;				
    			};
    		// 6
    		chaine_status = chaine_status.concat(String.valueOf(myBearing));
    		chaine_status = chaine_status.concat(";");
     
    		// Latitude et longitude
    		// 7
    		myLatitude = myLocation.getLatitude();
    		chaine_status = chaine_status.concat(String.valueOf(myLatitude));
    		chaine_status = chaine_status.concat(";");
     
    		// 8
    		myLongitude = myLocation.getLongitude();
    		chaine_status = chaine_status.concat(String.valueOf(myLongitude));
    		chaine_status = chaine_status.concat(";");
     
    		// Speed
    		// 9
    		hasmySpeed = myLocation.hasSpeed();
    		if (hasmySpeed){
    				chaine_status = chaine_status.concat("y");
    				chaine_status = chaine_status.concat(";");
    				mySpeed = (int) myLocation.getSpeed();
    			}
    		else {
    				chaine_status = chaine_status.concat("n");
    				chaine_status = chaine_status.concat(";");				
    				mySpeed = 0;
    			};
    		// 10
    		chaine_status = chaine_status.concat(String.valueOf(mySpeed));
    		chaine_status = chaine_status.concat(";");
     
    		// time
    		// 11	
    		myTime = myLocation.getTime();
    		chaine_status = chaine_status.concat(String.valueOf(myTime));
    		chaine_status = chaine_status.concat(";");
     
    		/////////////	
     
    	}
     
    	else {		
    		chaine_status = chaine_status.concat("location_NULL");
    	}
     
     
    	return chaine_status;
    }

  7. #7
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Par défaut
    je te remercie c'est parfait !

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Par défaut Merci merci.....
    Merci à courdi95 de se repondre tout seul....
    C'est franchement dur de trouver des exemples Windev
    PC soft est moyen la dessus. (je suis nouveau: on a le droit de les critiquer sur ce site ou on est censuré comme sur leur forum?)

    Developpeurs Windev >>> courage....

  9. #9
    Membre émérite
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Par défaut
    Je pense au contraire qu'il faut les encourager ! et leur faire remonter les bugs, leur proposer des améliorations, etc ... PCSOFT fait un boulot terrible en nous proposant un framework unifié pour toutes ces plateformes.

    On peut se partager ici, par exemple, nos découvertes et trouvailles.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 7
    Par défaut
    Tu as tout a fait raison.....

    Cela fait des années que j'utilise WD et le multi plateforme est vraiment un plus. Cependant je trouve dommage le comportement de PCSoft et je reste persuadé que quelques changement de leur part rendrait WD WM... incontournables.
    Exemples:
    -changer de marketing (absolument necessaire exit fille paint shop pro...)
    -baisser un peu le prix
    -accepter quelques critiques
    -reactivité sur certain bugs connus (impression qui plante le soft depuis 5.5)
    -faire plein de new fonctions (WD10 avait deja 99%des fonction de WD16!!!)
    -creer une vrai communauté de developpeurs...

    Windev ira loin c'est sur....

  11. #11
    Membre émérite
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Par défaut
    Citation Envoyé par nikoniko555 Voir le message
    Tu as tout a fait raison.....

    Cela fait des années que j'utilise WD et le multi plateforme est vraiment un plus. Cependant je trouve dommage le comportement de PCSoft et je reste persuadé que quelques changement de leur part rendrait WD WM... incontournables.
    Exemples:
    -changer de marketing (absolument necessaire exit fille paint shop pro...)
    cela fait marrer mes collègues (et hurler mon épouse), mais visiblement c'est une manière pour eux de se démarquer ; si c'était aussi austère que leurs concurrrents, comment se démarquer ?
    mais les développeurs vont au delà de cette apparence, en reconnaissant les vrais qualités du produit
    et puis j'aime bien avoir un sourire au moment de la compilation :-)
    Citation Envoyé par nikoniko555 Voir le message
    -baisser un peu le prix
    pas franchement cher vu le temps que cela fait gagner
    Citation Envoyé par nikoniko555 Voir le message
    -accepter quelques critiques
    pas franchement d'accord, de mon côté ils répondent systématiquement
    Citation Envoyé par nikoniko555 Voir le message
    -reactivité sur certain bugs connus (impression qui plante le soft depuis 5.5)
    pas franchement d'accord ... mais j'ai un contrat AD, cela doit compter
    Citation Envoyé par nikoniko555 Voir le message
    -faire plein de new fonctions (WD10 avait deja 99%des fonction de WD16!!!)
    pas franchement d'accord avec toi : j'utilise Windev depuis la v15, et j'ai vu quand même pas mal de nouvelles fonctions peut-être pas dans WB mais surement dans WM
    Citation Envoyé par nikoniko555 Voir le message
    -creer une vrai communauté de developpeurs...
    on a ce forum ici qui marche pas mal finalement ...
    Citation Envoyé par nikoniko555 Voir le message

    Windev ira loin c'est sur....
    il suffit de les aider ...

  12. #12
    Invité de passage
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 1
    Par défaut Niveau GSM
    Bonjour,
    Cela fonctionne très bien et je souhaiterais savoir si tu as déjà réaliser un programme équivalent pour récupérer le niveau GSM.

    J'ai utilisé un exemple WinDev qui renvoie une erreur systématique : Erreur interne du framework WDJava.Java.lang.NullPointerException
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import android.telephony.SignalStrength;
    public static int Puissance_GSM()
    {
        SignalStrength tmpPuissanceGSM = null;
        return tmpPuissanceGSM.getGsmSignalStrength();
    }

  13. #13
    Membre émérite
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Par défaut
    Regarde si tu as compilé ton programme avec une version du sdk qui est compatible de cette fonction .... ex : si cette fonction est dispo sur de l'android mini 3.1, il faut selectionner ce niveau mini d'android dans la compil windev.

    Ce n'est qu'une idee ... a confirmer . Et me dire si c'est cela !

  14. #14
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1
    Par défaut Merci
    Je sais que ce post arrive tard...

    Merci courdi95 d'avoir partagé ce code. Je suis en version 17 et ce problème n'a toujours pas été réglé. Tes fonctions natives en java arrivent à point.

  15. #15
    Membre régulier
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Par défaut Un petit coup de main svp....
    Bonjour a tous,

    Voici quelque temps que je patauge avec l'instruction GpsEtat qui ne répond jamais rien de consistant.
    A force de chercher, je suis tombé sur ce post qui répond 100% à ce que je cherche.

    Seulement, très humblement, je n'ai jamais utilisé les accès natifs java de WD et je tente d'intégrer ce code sans succès actuellement.

    J'ai donc copié le code fourni dans une procédure globale et j'y fais appel à partir de WD. La compilation ne donne pas d'erreur mais le programme bugge au niveau de l'appel à la procédure sans donner de message clair. (Ce code contient encore des erreurs de compilation et ne peut pas être exécuté.).

    Sans doute s'agit-il d'une bêtise et vous savez comme l'on peut s'enfermer dans ce cas...

    Quelqu'un pourrait-il me donner quelques mots d'explication ou me procurer un petit exemple que je puisse résoudre le problème?

    Un grand merci d'avance.

    Thierry

  16. #16
    Membre émérite
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Par défaut
    Bonjour

    Moi aussi j'ai mis pas mal de temps à comprendre .... et c'est en regardant du côté du développement natif Android que j'ai compris quelque chose de fondamental.

    En fait PCSOFT a baptisé toutes les fonctions de "GeoLocalisation" Windev Mobile avec un préfixe "GPS".

    Ce qui est un abus, car en fait parmi celles-ci uniquement GPSEtat fait appel aux ressources de la puce de réception des satellites GPS/Glonass !!

    Toutes les autres fonctions font appel aux ressources de géolocalisation Android. Cette ressource de géolocalisation n'utilise pas obligatoirement la puce GPS, puisqu'elle peut utiliser la localisation par le réseau. D'ailleurs la fonction GPSInfo permet de savoir quelle est la ressource utilisée et c'est dans GPSInitParamètre que l'on précise ce que l'on veut utiliser:
    - géolocalisation par le réseau : votre smartphone s'il est connecté en Wifi ou en 3G va communiquer (de manière complètement transparente) avec Google pour que Google lui transmette sa position calculée avec les infos sur les bornes wifi et/ou GSM qui vous entourent ... à condition que vous ayez autorisé Google à vous localiser dans votre compte Google ; permet fonctionnement à l'intérieur des batiments,
    - géolocalisation par GPS : dans ce cas, c'est la puce GPS de votre smartphone qui fait le positionnement de manière autonome ; plus difficile car nécessite fonctionnement à l'extérieur généralement pour la bonne réception des signaux des satellites GPS (et Glonass pour les smartphones récents)

    Je l'avais signalé à PcSoft le jour où ces fonctions sont sorties mais ils n'en ont pas tenu compte.

    Donc la seule fonction purement GPS est :
    GPSEtat

    Les suivantes devraient s'appeler "GeoLocalisation" au lieu de "Gps" :
    GPSInfo
    GPSArrêteDétection
    GPSDernièrePosition
    GPSDétectePosition
    GPSInitParamètre
    GPSRécupèrePosition
    GPSSuitDéplacement
    GPSTermine

    La fonction GPSEtat ne renvoie pas d'informations sur les satellites reçus c'est pour cela que j'avais mis en place les fonctions natives.

    Par ailleurs, la fonction GPSDétectePosition est bloquante (gênant aussi). Je préfère un pooling des infos GPS directement dans le SDK.

  17. #17
    Membre régulier
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Par défaut
    Merci pour ces précisions qui effectivement éclairent ma lanterne sur les difficultés que je rencontre avec GpsEtat. C'est très clair et je t'en remercie.

    Mon message était aussi basé sur le fait que j'éprouve des difficultés à intégrer la solution proposée.
    Je n'ai jamais intégré du code java (que je ne connais pas) dans WD.
    Mes tentatives échouent et je ne comprends pas pourquoi car le débogueur n'est pas très loquace.

    Pourrais-tu me donner quelques mots d'explication pour l'intégration du code dans le programme WD? Ou un simple exemple qui me remettrait sur le bon chemin.

    Merci pour ta patience.

    Thierry

  18. #18
    Membre régulier
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Par défaut
    Oups.....autant pour moi.

    J'ai trouvé la réponse sur le forum et c'est toi qui l'a écrites.

    REMARQUE : le code NE FONCTIONNE PAS dans le SIMULATEUR WM !! Il faut utiliser un vrai téléphone ou tablette, ou utiliser un émulateur ANDROID.

    Donc cela explique que cela ne fonctionne pas dans mon cas.

    Encore merci et désolé, je n'avais sans doute pas lu jusqu'au bout. Cela fini par saouler de surfer à la recherche de solutions.

  19. #19
    Membre émérite
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Par défaut
    OK ... très bien que tu ais trouvé la raison.

    J'allais t'encourager à apprendre (un peu) le Java ...

    N'oublie pas de plusser mes posts (avec l'icone pouce) pour donner des points à mes réponses ! Merci.

  20. #20
    Membre régulier
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Par défaut
    Citation Envoyé par courdi95 Voir le message
    OK ... très bien que tu ais trouvé la raison.

    J'allais t'encourager à apprendre (un peu) le Java ...

    N'oublie pas de plusser mes posts (avec l'icone pouce) pour donner des points à mes réponses ! Merci.
    Merci pour le conseil que j'approuve... Je commence à fatiguer.... En fait pour l'illustrer, je voudrais te dire qu'à la base je programmais du Cobol et du Fortran. Je ne sais même pas si cela éveille quelque chose chose en toi.... pour te dire que cela date et que j'ai déjà appris de nombreux langages. Cela me donne l'impression que c'est sans fin

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [WM18] Mettre du Java dans Windev Mobile sous Android(Appelle Natif
    Par LONTSIE dans le forum Windev Mobile
    Réponses: 1
    Dernier message: 16/07/2014, 08h19
  2. [WM18] Un listener java dans WINDEV MOBILE ANDROID : le retour
    Par courdi95 dans le forum Windev Mobile
    Réponses: 1
    Dernier message: 03/06/2013, 09h26
  3. Comment intégrer un Delphi DLL dans CBuilder
    Par Xavier dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/09/2005, 16h49
  4. Comment intégrer un programme Delphi dans CBuilder
    Par Xavier dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/07/2005, 20h23
  5. Réponses: 5
    Dernier message: 16/07/2005, 00h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo