android中Sensor工作流程(2)
来源:未知 责任编辑:责任编辑 发表时间:2014-01-26 21:59 点击:次
static native int sensors_data_open(FileDescriptor fd); //SensorThread 的 run()循环调用
static native int sensors_data_close();//SensorThread 的 run()循环调用
static native int sensors_data_poll(float[] values, int[] status, long[] timestamp);//SensorThread
的 run()循环调用
SensorManager 与 IsensorService 的关系
SensorManager 调用 IsensorService 其实只是调用了 service 的方法来控制 thread 是 Lock
void startLocked(ISensorService service) {
...
ParcelFileDescriptor fd = service.getDataChanel();
...
}
或者打开
mSensorService.enableSensor(l, name, handle, delay);
IsensorService 的实例是这么获得的
mSensorService = ISensorService.Stub.asInterface(
ServiceManager.getService(Context.SENSOR_SERVICE));
IsensorService 是通过 aidl 定义的
interface ISensorService
{
ParcelFileDescriptor getDataChanel();
boolean enableSensor(IBinder listener, String name, int sensor, int enable);
}
SensorService
frameworks/base/services/java/com/android/server/SensorService.java
class SensorService extends ISensorService.Stub {
...
}
service 最终被 manager 调到走的是 android 的标准流程我们不 care,我们想知道的其实就是
enableSensor 的实现
首先,得有电
if (enable == SENSOR_DISABLE) {
mBatteryStats.noteStopSensor(uid, sensor);
} else {
mBatteryStats.noteStartSensor(uid, sensor);
}
看是不是能打开 sensor
if (enable!=SENSOR_DISABLE && !_sensors_control_activate(sensor, true)) {
Log.w(TAG, "could not enable sensor " + sensor);
return false;
}
如果 sensor 打开了 我们要监听状态还要对外面报告状态变化
if (l == null && enable!=SENSOR_DISABLE) {
l = new Listener(binder);
binder.linkToDeath(l, 0);
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>