我正在製作我的第一個Android應用程序。作爲學習系統的玩具問題,我想製作一個簡單的應用程序,以文本形式顯示手機使用內置指南針指向的方向。第一個Android應用程序 - 如何訪問指南針
如何從我的代碼訪問指南針,並讓我的代碼知道方向更改?
我相信我需要SensorManager class但我很困惑如何使用它。我如何知道我想要羅盤傳感器?我如何告訴它在方向改變時做一個動作(更新文本)?
我正在製作我的第一個Android應用程序。作爲學習系統的玩具問題,我想製作一個簡單的應用程序,以文本形式顯示手機使用內置指南針指向的方向。第一個Android應用程序 - 如何訪問指南針
如何從我的代碼訪問指南針,並讓我的代碼知道方向更改?
我相信我需要SensorManager class但我很困惑如何使用它。我如何知道我想要羅盤傳感器?我如何告訴它在方向改變時做一個動作(更新文本)?
// 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);
但是,請注意,這實際上是一個磁傳感器;因此如果你周圍有磁場干擾,它可能指向錯誤的方向。此外,您需要知道True North和Magnetic North之間的區別。由於此代碼使用磁性傳感器,因此您可以獲得Magnetic North,如果需要計算True North,則需要使用GeomagneticField.getDeclination()進行一些調整。
這是怎麼回事,請參見「實施SensorEventListener一個簡單的應用程序類「的代碼?我對Java有點新鮮,以前我沒有看過這種語法。 – Greg 2010-09-22 00:24:11
@Greg:這就是所謂的匿名類(你可以谷歌「匿名類java」)。 SensortEventListener是一個「接口」,我們可以編寫一個「實現」接口的類。由於這只是一個小例子,我使用了匿名類;但是,如果您的SensorEventListener類更復雜,則應該使用命名類。 – 2010-09-22 02:47:19
查看API演示。有一個已經寫入的應用程序可以訪問指南針和加速度計。也許這會讓你更好地瞭解你如何執行任務。
:/android-sdk-linux_86/samples/android-8/ApiDemos/src/com/example/android/apis/os/sensor.java
你要找到它
希望它有幫助。
首先,你應該檢查一下指南針傳感器存在系統
PackageManager m = getPackageManager();
if(!m.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
Log.d("COMPASS_SENSOR", "Device has no compass");
}
上爲什麼不寫而不是問「我怎麼做這個」 – Falmarri 2010-09-18 22:31:26