原文鏈接:http://bbs.seacat.cn/thread-902-1-1.html
你可以通過Android平臺的標準APIs來訪問地理位置和傳感器的數據. 地理位置 在Glass上調用Android平臺的標準APIs,通過下面的Android SDK的類來獲取地理位置信息: 1、LocationManager – 用來訪問Android地理位置系統服務 2、LocationProvider – 基於特定的criteria來提供位置信息。Glass提供特殊的遠程providers,可以用來獲取安裝了MyGlass App的配對設備的地理位置信息。 3、Criteria – 可以創建一個criteria的集合,用來選取最佳的 LocationProvider 爲了獲取地理位置信息,你需要使用LocationManager 類來從一個或多個location providers中獲取數據。 在Android設備上的程序獲取地理位置信息是通過GPS和網絡。可是在Glass上,有效的 location providers集合是動態的,並且可能包含來自其他數據源的遠程location providers,例如安裝了MyGlass App的藍牙配對設備。爲了處理這些附加的providers,應該監聽多個providers的位置信息的更新。 注意:不要使用 LocationManager.getBestProvider()方法或 GPS_PROVIDER 和 NETWORK_PROVIDER 常量來監聽地理位置的更新。Glass使用動態的 providers集合,只監聽單個provider會造成位置更新的丟失。 從所有有效的 location providers獲取數據: |
1、創建一個Criteria 對象
2、調用 getProviders()方法獲取可用的providers列表
3、遍歷providers列表並請求更新。這樣能確保你能接收到遠程providers的更新。
LocationManager locationManager; // initialized elsewhere
// This example requests fine accuracy and requires altitude, but
// these criteria could be whatever you want.
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(true);
List<String> providers = locationManager.getProviders(
criteria, true /* enabledOnly */);
for (String provider : providers) {
locationManager.requestLocationUpdates(provider, minTime,
minDistance, listener);
}
傳感器
Glass支持一下傳感器:
TYPE_ACCELEROMETER(加速計)
TYPE_GRAVITY (重力)
TYPE_GYROSCOPE (陀螺儀)
TYPE_LIGHT (光線)
TYPE_LINEAR_ACCELERATION (線性加速計)
TYPE_MAGNETIC_FIELD (磁場)
TYPE_ORIENTATION (方向 被棄用)
TYPE_ROTATION_VECTOR (旋轉角度)
不支持以下傳感器:
TYPE_AMBIENT_TEMPERATURE (環境溫度)
TYPE_PRESSURE (壓力)
TYPE_PROXIMITY (距離)
TYPE_RELATIVE_HUMIDITY (相對溼度)
TYPE_TEMPERATURE (溫度)
對於在Glass上使用傳感器還有些小提示:
1、Glass傳感器協調系統是相對於顯示屏的。
2、爲了保持電池壽命,只有在你需要的時候才需要監聽傳感器。如果你的Glassware使用一個服務來渲染動態卡片,且你只有在活動卡片可見的時候才需要傳感器,使用動態卡片的surface回調方法來啓動或停止對傳感器的監聽,
3、傳感器回調時間運行在UI主線程,所以要儘快的處理事件並返回。如果你的處理任務很耗時,可以考慮將傳感器事件插入到一個隊列中,使用後臺線程來處理他們。
4、爲了跟蹤頭部運動,50hz的採樣率足夠了。