2015-11-01 47 views
0

對於缺少代碼示例表示歉意,但迄今爲止我嘗試過的任何事情都是一團糟。帶傳感器數據的Android Wear錶盤

我試過在線搜索信息,也許我沒有搜索正確的術語。

我可以在Android Studio中使用示例創建一個錶盤&我創建了一個從傳感器檢索數據的應用程序。我不能做的是將這兩者結合起來。

我想要做的是創建一個Android Wear表面,可以顯示從手錶上的傳感器收集的各種數據。

例如,加速計始終打開,以啓用手腕手勢。

任何人都可以指出我正確的方向,如何解決這個問題,而不會發佈一個鏈接到android API,因爲我已經用盡了。

問候,

埃米特

+0

如果您打算一直收集來自傳感器的數據,那麼我認爲這對用戶來說並不符合用戶的最佳利益,因爲這會立即殺死電池。一個好的表面進入環境模式,而在該狀態下,CPU處於幾乎睡眠狀態以保存電池。在這種狀態下,通常向用戶顯示非常基本的信息,通常是小時和分鐘(甚至不是第二次),也可能是一些更靜態/更少的變化數據。當它出現時,如果這個狀態,你會得到一個回調,你可以做一些精美的工作,如讀取傳感器值。 –

+0

好的,謝謝。最初,我只想看看我能否從手錶表面訪問數據,目標是不顯示數據,但讓它監聽可能由傳感器更改產生的某些事件。我試過尋找教程和代碼示例來基本顯示步驟或手錶臉上的心跳無濟於事。 – mangledBadger

+0

您可能想描述當您嘗試從表面訪問傳感器數據以獲得直接幫助時,您遇到的問題。 –

回答

2

好了,以後打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的示例應用程序創建了此應用程序。