Aller au contenu

Utiliser les sensors


Blister

Recommended Posts

Bonjour,

Je viens d'implémenté votre petit programme dans votre news qui "scan" les sensors.

Mais lorsque je met ce programme dans eclispe il ne veux pas me le compiler. je vous montres mon code

package fr.superdroid;

import android.app.Activity;
import android.content.Context;
import android.hardware.SensorListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;


public class superdroid extends Activity {    
   @Override

   public void onCreate(Bundle savedInstanceState)
   {
   capteur accelerometre;
   String txt = new String();        
   TextView tv = new TextView(this);        
   accelerometre = new capteur();        
   super.onCreate(savedInstanceState);
       SensorManager m = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
       m.registerListener(accelerometre, SensorManager.SENSOR_ACCELEROMETER);      

       txt = "X : " + accelerometre.x;
       txt = txt + "\nY : " + accelerometre.y;
       txt = txt + "\nZ : " + accelerometre.z;


       tv.setText(txt);
       setContentView(tv);
   }

   class capteur implements SensorListener{

       float x, y, z;        
       public void onSensorChanged(int sensor, float[] values) {

           x = values[0];
           y = values[1];
           z = values[2];

       }
   }    
}

il me souligne en rouge le capteur de class capteur donc je ne sais pas quoi faire ...

Pouvez vous m'aider ?

Merci,

Bonne soirée

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Bienvenue sur le forum :)

à priori c'est déjà fait, mais au cas où, un petit "ctrl+maj+o" pour ajouter tous les imports qui pourraient manquer :(

Sinon, quelle erreur est affichée en relation avec ce soulignement rouge ?

Lien vers le commentaire
Partager sur d’autres sites

Quand je clique sur "Add unimplemented methods" voilà ce qu'il me rajoute dans la class

Avant :

class capteur implements SensorListener{

       float x, y, z;        
       public void onSensorChanged(int sensor, float[] values) {

           x = values[0];
           y = values[1];
           z = values[2];

       }
   }    

Apres

   class capteur implements SensorListener{

       float x, y, z;        
       public void onSensorChanged(int sensor, float[] values) {

           x = values[0];
           y = values[1];
           z = values[2];

       }
       @Override
       public void onAccuracyChanged(int sensor, int accuracy) {
           // TODO Auto-generated method stub

       }
   }

Modifié par Blister
Lien vers le commentaire
Partager sur d’autres sites

Quand je clique sur "Add unimplemented methods" voilà ce qu'il me rajoute dans la class

Avant :

class capteur implements SensorListener{

       float x, y, z;        
       public void onSensorChanged(int sensor, float[] values) {

           x = values[0];
           y = values[1];
           z = values[2];

       }
   }    

Apres

   class capteur implements SensorListener{

       float x, y, z;        
       public void onSensorChanged(int sensor, float[] values) {

           x = values[0];
           y = values[1];
           z = values[2];

       }
       @Override
       public void onAccuracyChanged(int sensor, int accuracy) {
           // TODO Auto-generated method stub

       }
   }

et ça marche pas ça ?

sinon faut voir avec l'interface SensorEventListener comme le dit pjv...

Lien vers le commentaire
Partager sur d’autres sites

sinon faut voir avec l'interface SensorEventListener comme le dit pjv...

Testé et approuvé :)

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;

public class Capteur implements SensorEventListener {

   private float x;
   private float y;
   private float z;

   public void onAccuracyChanged(Sensor sensor, int accuracy) {
       // TODO Auto-generated method stub

   }

   public void onSensorChanged(SensorEvent event) {

       x = event.values[0];
       y = event.values[1];
       z = event.values[2];
   }

   public float getX() {
       return x;
   }

   public float getY() {
       return y;
   }

   public float getZ() {
       return z;
   }
}

Modifié par pjv
Lien vers le commentaire
Partager sur d’autres sites

J'ai bien cocher la case pour les sources inconnus mais quand j'essaye d'installer ça me marque (quand j'installe avec astro)

Impossible d'installer l'application sur ce téléphone ...

Sinon pour ta classe je la met dans un autre fichier ? ou je peut tous mettres sur le même ?

Modifié par Blister
Lien vers le commentaire
Partager sur d’autres sites

J'ai bien coucher la case pour les sources inconnus mais quand j'essaye d'installer ça me marque (quand j'installe avec astro)

Impossible d'installer l'application sur ce téléphone ...

Sinon pour ta classe je la met dans un autre fichier ? ou je peut tous mettres sur le même ?

C'est la même classe (capteur) mais il faut que tu changes l'interface qu'elle implemente

Donc change SensorListener en SensorEventListener

Lien vers le commentaire
Partager sur d’autres sites

Une autre question,

est ce que ce morceau de code est obligatoire ?

SensorManager m = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
m.registerListener(accelerometre, SensorManager.SENSOR_ACCELEROMETER);

car il me met cette erreur

erreurandroid2.jpg

Lien vers le commentaire
Partager sur d’autres sites

Une autre question,

est ce que ce morceau de code est obligatoire ?

SensorManager m = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
m.registerListener(accelerometre, SensorManager.SENSOR_ACCELEROMETER);

car il me met cette erreur

erreurandroid2.jpg

Non bien sur que non, je pense qu'il a mis cela en place pour embrouiller l'esprit!

Oui c'est obligatoire, car tu récupères l'accès au sensor proposé par le systeme...et tu ajoutes l'écouteur qui va écouter ce qu'il se passe sur le sensor pour y appliquer ton code.

Lien vers le commentaire
Partager sur d’autres sites

Ton soucis vient du faire que ton objet accelerometre (instance de la classe Capteur implémentant SensorEventListener) est reconnu comme "une variante de SensorEventListener".

Dans le tutoriel que tu utilises, le SensorManager fait appel à sa méthode registerListener qui prend en paramètre un objet SensorListener. Or, ton accelerometre n'est pas "une variante" de SensorListener.

Je te laisse le plaisir de trouver la modification à apporter pour que cela fonctionne comme tu le souhaites (ce n'est pas compliqué).

Quant à l'utilité de définir un SensorManager, c'est nécessaire car c'est la passerelle entre ton application et le hardware. Il se charge de définir quel Sensor est nécessaire à l'appli. Ceci permet de faire en sorte qu'elle ne soit pas perturbée par n'importe quel autre Sensor.

Lien vers le commentaire
Partager sur d’autres sites

Donc si j'ai bien compris il faudrais que je face un registerEventListener ? sinon j'ai séparer en 2 fichier un pour ma classe capteur et l'autre pour ma classe "mère"

Une autre question il faut toujours que j'utilise SensorManager ? car il me dit que la methode registerEventListener n'est pas définé pour un type sensorManager

Lien vers le commentaire
Partager sur d’autres sites

Donc si j'ai bien compris il faudrais que je face un registerEventListener ? sinon j'ai séparer en 2 fichier un pour ma classe capteur et l'autre pour ma classe "mère"

Non.

Une autre question il faut toujours que j'utilise SensorManager ? car il me dit que la methode registerEventListener n'est pas définé pour un type sensorManager

Tout simplement parce qu'elle n'existe pas.

Est-ce que tu utilises cette doc : lien ? Tout est là, il suffit de lire un peu et de trouver ce que tu cherches.

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...