类似于重力感应,抬起手势(提示)等功能
0. modem 相关底层配置好之后,需要烧入
fastboot flash modem NON-HLOS.bin
vendor.img
QSensorTest.apk 可以验证是否底层添加成功
vendor/qcom/propietary/sensors/QSensorsTest, 可以自己mm编译出来然后安装测试
1. 自己添加 新的sensor类型, 需要和 底层对应
(1)sensor.java
privare static final int QC_SENSOR_TYPE_BASE = 33171000
private static final int SENSOR_TYPE_PICK_xx = (QC_SENSOR_TYPE_BASE + 100)
(2) sensorManager
修改 getDefaultSensor(int type){
if(type =xx| type =xx | type =xx |
//添加自己新类型
type = Sensor.SENSOR_TYPE_PICK_xx ){
wakeUpSensor = true
}
}
(3)
frameworks/native/libs/sensor/SensorManager.cpp ---7.0 可能会动这个文件 8.0 可能不需要
hardware/libhardware/include/hardware/sensors.h
#define QC_SENSOR_TYPE_BASE = 33171000
#define SENSOR_TYPE_PICK_XX = (QC_SENSOR_TYPE_BASE + 11)
如果修改了 .cpp文件,找到里面有 里面有Android.bp 的,mm 编译即可
service.jar , framework.jar , arm64
2. 添加自己的服务
2.1 建立自己的服务service(not only mean service), 可以依赖系统的 SystemService 启动
比如依赖 NotificationManagerServices.java
(1)onstart 中初始化和创建自定义的 myService
(2)对应的比较重要的方法
mNotificationList --- 这个是所有的当前通知数据
mEnquenedNoifications --- 这个是当前发通知的队列
MyService m ;
onstart(){
m = new MyService();
}
postNotficationRunnable(){
//添加自己需要监听的数据
m.method(mNotificationList)
m.method(mEnquenedNoifications)
}
cancelNotificationLocked(){
//添加自己需要监听的数据
m.method(mNotificationList)
}
class myService(){
if(screenOn){
}
if (screenOff){
}
register(){
}
}
2.2 在系统本身的服务中,直接添加(移植性较差)
example:
systemui/doze/DozeService.java
DozeService.java{
oncreate(){
// 注册自己的service
执行 requestPulse()
}
unregister(){
//销毁service
}
}