- 与Server端通信的建立过程
4,应用开发总结
1,类架构框图
如上图所示,Sensor Framework相对于Audio等模块来说,比较简单,摘录几个关键类的设计意图如下:
/**
-
- SensorManager lets you access the device’s {@link android.hardware.Sensor
- sensors}. Get an instance of this class by calling
- {@link android.content.Context#getSystemService(java.lang.String)
- Context.getSystemService()} with the argument
- {@link android.content.Context#SENSOR_SERVICE}.
-
- Always make sure to disable sensors you don’t need, especially when your
- activity is paused. Failing to do so can drain the battery in just a few
- hours. Note that the system will not disable sensors automatically when
- the screen turns off.
-
- Note: Don’t use this mechanism with a Trigger Sensor, have a look
- at {@link TriggerEventListener}. {@link Sensor#TYPE_SIGNIFICANT_MOTION}
- is an example of a trigger sensor.
- public class SensorActivity extends Activity, implements SensorEventListener {
-
private final SensorManager mSensorManager;
-
private final Sensor mAccelerometer;
-
public SensorActivity() {
-
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
-
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
-
}
-
protected void onResume() {
-
super.onResume();
-
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
-
}
-
protected void onPause() {
-
super.onPause();
-
mSensorManager.unregisterListener(this);
-
}
-
public void onAccuracyChanged(Sensor sensor, int accuracy) {
-
}
-
public void onSensorChanged(SensorEvent event) {
-
}
- }
- @see SensorEventListener
- @see SensorEvent
- @see Sensor
*/
public abstract class SensorManager {
…
}
/**
- Sensor manager implementation that communicates with the built-in
- system sensors.
- @hide
*/
public class SystemSensorManager extends SensorManager {
…
}
class ISensorServer : public IInterface
{
public:
DECLARE_META_INTERFACE(SensorServer);
virtual Vector getSensorList(const String16& opPackageName) = 0;
virtual sp createSensorEventConnection(const String8& packageName,
int mode, const String16& opPackageName) = 0;
virtual int32_t isDataInjectionEnabled() = 0;
};
/**
- Every hardware module must have a data structure named HAL_MODULE_INFO_SYM
- and the fields of this data structure must begin with hw_module_t
- followed by module specific information.
*/
struct sensors_module_t {
struct hw_module_t common;
/**
- Enumerate all available sensors. The list is returned in “list”.
- @return number of sensors in the list
/
int (get_sensors_list)(struct sensors_module_t module,
struct sensor_t const* list);
/**
- Place the module in a specific mode. The following modes are defined
- 0 - Normal operation. Default state of the module.
- 1 - Loopback mode. Data is injected for the the supported
-
sensors by the sensor service in this mode.
- @return 0 on success
-
-EINVAL if requested mode is not supported
-
-EPERM if operation is not allowed
如何做好面试突击,规划学习方向?
面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。
学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。
我搜集整理过这几年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。
在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
ps://bbs.csdn.net/topics/618156601)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!