2010-09-18 27 views
3

Je fais ma première application Android. Comme un problème de jouet pour apprendre le système, je veux faire une application simple qui affiche sous forme de texte dans quelle direction le téléphone pointe en utilisant la boussole intégrée.Première application Android - Comment accéder à la boussole

Comment accéder à la boussole à partir de mon code et faire en sorte que mon code prenne conscience des changements de direction?

Je crois que je vais avoir besoin de SensorManager class mais je suis confus comment l'utiliser. Comment puis-je lui dire que je veux le capteur de la boussole? Comment puis-je lui dire de faire une action (mise à jour du texte) sur un changement de direction?

+1

Pourquoi ne pas écrire une application plus simple au lieu de demander « comment puis-je faire cela » – Falmarri

Répondre

11
// First, get an instance of the SensorManager 
SensorManager sMan = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 

// Second, get the sensor you're interested in 
Sensor magnetField = sMan.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); 

// Third, implement a SensorEventListener class 
SensorEventListener magnetListener = new SensorEventListener() 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // do things if you're interested in accuracy changes 
    } 
    public void onSensorChanged(SensorEvent event) { 
     // implement what you want to do here 
    } 
} 

// Finally, register your listener 
sMan.registerListener(magnetListener, magnetField, SensorManager.SENSOR_DELAY_NORMAL); 

Cependant, veuillez noter qu'il s'agit en fait d'un capteur magnétique; par conséquent, si vous avez des interférences magnétiques autour de vous, cela peut indiquer une mauvaise direction. Aussi, vous devez connaître la différence entre True North et Magnetic North. Puisque ce codé utilise un capteur magnétique, vous obtenez le Nord magnétique, si vous avez besoin de calculer le Nord géographique, vous devrez faire quelques ajustements avec GeomagneticField.getDeclination().

+0

Qu'est-ce qui se passe dans la section « Mettre en place un SensorEventListener classe "de votre code? Je suis un peu nouveau à Java, je n'ai jamais vu cette syntaxe auparavant. – Greg

+1

@Greg: C'est ce qu'on appelle la classe anonyme (vous pouvez google "classe anonyme Java"). SensortEventListener est une "interface", et nous pouvons écrire une classe qui "implémente" une interface. Comme ce n'est qu'un petit exemple, j'ai utilisé une classe anonyme; Toutefois, si votre classe SensorEventListener est plus complexe, vous devez utiliser une classe nommée à la place. –

5

Découvrez les démos de l'API. Il y a une application qui a déjà été écrite qui accède à la boussole et à l'accéléromètre. Peut-être que cela vous donnera une meilleure idée sur la façon dont vous pouvez vous acquitter de votre tâche.

vous trouverez dans:

/android-sdk-linux_86/samples/android-8/ApiDemos/src/com/example/android/apis/os/sensor.java

espérons que ça aide.

0

D'abord, vous devriez vérifier si un capteur de boussole est présent sur le système

PackageManager m = getPackageManager(); 
if(!m.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) { 
     Log.d("COMPASS_SENSOR", "Device has no compass"); 
}