好了,以後打3天左右的和令人沮喪的錯誤,我已經成功地解決它,如果任何人都需要想出解決辦法:
第一實施SensorEventListener:
private class Engine extends CanvasWatchFaceService.Engine implements SensorEventListener
接下來,onVisibilityChanged內,我註冊了兩個方法我已經創建:
@Override
public void onVisibilityChanged(boolean visible) {
super.onVisibilityChanged(visible);
if (visible) {
registerReceiver();
registerAccelerometer();
mTime.clear(TimeZone.getDefault().getID());
mTime.setToNow();
} else {
unregisterReceiver();
unregisterAccelerometer();
}
updateTimer();
}
而且,這兩個方法:
private void registerAccelerometer() {
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
}
private void unregisterAccelerometer() {
sensorManager.unregisterListener(this);
}
然後,onSensorChanged,在那裏我聽加速度的變化中:
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
......
// Calculate here
}
sensorX = (int)linear_acceleration[0];
sensorY = (int)linear_acceleration[1];
sensorZ = (int)linear_acceleration[2];
}
分配這三個變量的的onDraw()之前方法稱爲:
@Override
public void onDraw(Canvas canvas, Rect bounds) {
// Get the current Time
mTime.setToNow();
// Set the current accelerometer readings.
accelerometerX.setText("X : " + String.valueOf(sensorX));
accelerometerY.setText("Y : " + String.valueOf(sensorY));
accelerometerZ.setText("Z : " + String.valueOf(sensorZ));
accelerometerRateOfChange.setText("T: " + String.valueOf(totalDisplacement));
}
In理論上,所有傳感器都應該是相同的,而不僅僅是加速度計。
值得注意的是,我使用Android Studio的示例應用程序創建了此應用程序。
如果您打算一直收集來自傳感器的數據,那麼我認爲這對用戶來說並不符合用戶的最佳利益,因爲這會立即殺死電池。一個好的表面進入環境模式,而在該狀態下,CPU處於幾乎睡眠狀態以保存電池。在這種狀態下,通常向用戶顯示非常基本的信息,通常是小時和分鐘(甚至不是第二次),也可能是一些更靜態/更少的變化數據。當它出現時,如果這個狀態,你會得到一個回調,你可以做一些精美的工作,如讀取傳感器值。 –
好的,謝謝。最初,我只想看看我能否從手錶表面訪問數據,目標是不顯示數據,但讓它監聽可能由傳感器更改產生的某些事件。我試過尋找教程和代碼示例來基本顯示步驟或手錶臉上的心跳無濟於事。 – mangledBadger
您可能想描述當您嘗試從表面訪問傳感器數據以獲得直接幫助時,您遇到的問題。 –