原文链接: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的采样率足够了。