Первое приложение для Android - Как получить доступ к компасу - PullRequest
3 голосов
/ 18 сентября 2010

Я делаю свое первое приложение для Android. Как игрушечная задача для изучения системы, я хочу сделать простое приложение, которое отображает в виде текста, в каком направлении телефон указывает, используя встроенный компас.

Как мне получить доступ к компасу из моего кода, и чтобы мой код знал об изменениях направления?

Полагаю, мне понадобится класс SensorManager , но я не совсем понимаю, как его использовать. Как мне сказать, что я хочу датчик компаса? Как мне сказать ему выполнить действие (обновить текст) при изменении направления?

Ответы [ 3 ]

11 голосов
/ 18 сентября 2010
// 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().

5 голосов
/ 18 сентября 2010

Посмотрите демонстрации API. Уже написано приложение, которое обращается к компасу и акселерометру. Может быть, это даст вам лучшее представление о том, как вы можете выполнить свою задачу.

вы найдете его в:

/ Android-SDK-linux_86 / образцы / Android-8 / ApiDemos / SRC / COM / пример / Android / API / OS / sensor.java

надеюсь, это поможет.

0 голосов
/ 14 августа 2015

Сначала вы должны проверить, есть ли в системе датчик компаса

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