3

我正在制作我的第一个 Android 应用程序。作为一个学习系统的玩具问题,我想制作一个简单的应用程序,使用内置的指南针将手机指向的方向显示为文本。

如何从我的代码访问指南针,并让我的代码知道方向变化?

我相信我需要SensorManager 类,但我很困惑如何使用它。我如何告诉它我想要指南针传感器?我如何告诉它在方向改变时执行操作(更新文本)?

4

3 回答 3

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);

但是请注意,这实际上是一个磁传感器;因此,如果您周围有磁场干扰,它可能指向错误的方向。此外,您需要知道真北和磁北之间的区别。由于此代码使用磁传感器,因此您可以获得磁北,但如果您需要计算真北,则需要使用 进行一些调整GeomagneticField.getDeclination()

于 2010-09-18T03:23:40.397 回答
5

看看 API 演示。已经编写了一个访问指南针和加速度计的应用程序。也许这会让你更好地了解如何完成你的任务。

您将在以下位置找到它:

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

希望能帮助到你。

于 2010-09-18T04:48:49.580 回答
0

首先,您应该检查系统上是否存在指南针传感器

PackageManager m = getPackageManager();
if(!m.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
        Log.d("COMPASS_SENSOR", "Device has no compass");
}
于 2015-08-14T07:18:42.700 回答