安卓手机皮套功能的开启

      目前的安卓智能手机生产厂商,除了硬件设计、配置及外观的设计外,还需要相应软件的支持,而软件方面主要是根据具体硬件的配置和客户需求在安卓原生态系统上进行修改与优化,皮套功能就是其中之一,也是近几年安卓智能手机新添加的一种功能。

    皮套功能说白了就是在装有翻盖带视窗皮套的手机上,在不翻开皮套盖时,通过在视窗上显示的界面直接进行一些点触操作,可直接查看或打开手机的一些功能,比如说时间日历、通话记录、短信、音乐等。这些功能的实现首先需要一些硬件支持:屏幕TP的磁力感应特性和带磁性的开窗皮套。

    皮套功能的引入,除了上述硬件条件外,还需要在软件上做相应的配置与开发,本文以Android 5.1系统为例主要讲一下软件(安卓系统源码)上的配置:

1、修改HALL开关宏定义:

源码位置:alps/kernel-3.10/drivers/misc/mediatek/mach/平台名称/系统版本名称/keypad/mtk_kpd.h

修改语句:#if defined(CONFIG_MODULE_HALL_SUPPORT)

2、驱动层打开HALL开关:

源码位置:alps/device/hexing/系统版本分支名称/ProjectConfig.mk

修改语句:平台大写英文简称_HALL_SUPPORT = yes

源码位置:alps/device/hexing/系统版本分支名称/系统版本名称_debug_defconfig

修改语句:CONFIG_MODULE_HALL_SUPPORT = y

源码位置:alps/device/hexing/系统版本分支名称/系统版本名称_defconfig

修改语句:CONFIG_MODULE_HALL_SUPPORT = y

3、上层打开HALL开关:

源码位置:alps/frameworks/base/core/res/res/values/config.xml

修改语句:<bool name="config_lidControlsSleep">true</bool>

4、针对开发皮套应用的相关配置:

源码位置:alps/build/target/product/core.mk

修改语句:在应用名称列末尾添加SmartCover(要开发的皮套应用包名)

源码位置:alps/device/hexing/系统版本分支名称/ProjectConfig.mk

修改语句:SMART_COVER_SUPPORT = yes

源码位置:alps/device/mediatek/common/device.mk

修改语句:  ifeq ($(strip $(SMART_COVER_SUPPORT)), yes)//添加皮套功能支持

修改语句:  PRODUCT_PACKAGES += SmartCover//指定皮套应用名

修改语句:  PRODUCT_PROPERTY_OVERRIDES += ro.com.android.smartcover=1//指定皮套应用包名

  endif

源码位置:alps/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

ActivityManager am = (ActivityManager) mContext.getSystemService("activity");                

ComponentName cn = am.getRunningTasks(1).get(0).topActivity;                

String className = cn.getClassName();

修改语句:              if(SystemProperties.get("ro.com.android.smartcover").equals("1"))//验证皮套应用包名

              {

修改语句:                   am.forceStopPackage("com.android.smartcover");

              }                

mSLCMainActivityState =0 ;        

}


private void startSmartLidActivity() {                

keyguardUnLock();                

Intent i = new Intent();

               ComponentName cn;

修改语句:              if(SystemProperties.get("ro.com.android.smartcover").equals("1"))//验证皮套应用包名

              {

修改语句:                  cn = new ComponentName("com.android.smartcover", "com.android.smartcover.MainActivity");//皮套应用入口类

              }                

i.setComponent(cn);                

if (0 == mSLCMainActivityState)                 

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    至此,皮套功能开启的系统源码配置已经完成,在上面的前三步主要是开启HALL功能即屏幕的磁力感应,第四步中,涉及到了针对皮套应用的相关配置,在这里,皮套应用需要根据皮套开窗大小形状单独开发,包括界面的设计与功能的添加,再添加到源码中编译。

    当这些软硬件条件都具备后才能实现完整的皮套应用。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
华为P8Max手机原厂维修图纸 原理图 电路图 故障维修图(PDF版) 华为P8Max 位置图 点位图 位号图.pdf 华为P8Max 原理图 电路图.pdf 华为P8Max 注释图 故障标注 主板元器件位置图.pdf 华为P8Max 原厂图 维修流程图 FM故障.pdf 华为P8Max 原厂图 维修流程图 GPS故障.pdf 华为P8Max 原厂图 维修流程图 GSM1发射故障.pdf 华为P8Max 原厂图 维修流程图 GSM1接收故障.pdf 华为P8Max 原厂图 维修流程图 GSM发射故障.pdf 华为P8Max 原厂图 维修流程图 GSM接收故障.pdf 华为P8Max 原厂图 维修流程图 HALL感应故障.pdf 华为P8Max 原厂图 维修流程图 LCD故障.pdf 华为P8Max 原厂图 维修流程图 LTE主集接收故障.pdf 华为P8Max 原厂图 维修流程图 LTE分集接收故障.pdf 华为P8Max 原厂图 维修流程图 LTE发射故障.pdf 华为P8Max 原厂图 维修流程图 PMU输出电压测量点与电压值.pdf 华为P8Max 原厂图 维修流程图 TD-SCDMA发射故障.pdf 华为P8Max 原厂图 维修流程图 TD-SCDMA接收故障.pdf 华为P8Max 原厂图 维修流程图 VBATTVBAT_SYS相关器件PCB图.pdf 华为P8Max 原厂图 维修流程图 WCDMA发射故障.pdf 华为P8Max 原厂图 维修流程图 WCDMA接收故障.pdf 华为P8Max 原厂图 维修流程图 WIFI、BT故障.pdf 华为P8Max 原厂图 维修流程图 不开机(大电流).pdf 华为P8Max 原厂图 维修流程图 不开机(小电流).pdf 华为P8Max 原厂图 维修流程图 不开机(无电流.pdf 华为P8Max 原厂图 维修流程图 不识别SD卡.pdf 华为P8Max 原厂图 维修流程图 不识别SIM卡1.pdf 华为P8Max 原厂图 维修流程图 不识别SIM卡2.pdf 华为P8Max 原厂图 维修流程图 不识别USB设备.pdf 华为P8Max 原厂图 维修流程图 充电故障.pdf 华为P8Max 原厂图 维修流程图 前置摄像故障.pdf 华为P8Max 原厂图 维修流程图 后置摄像故障.pdf 华为P8Max 原厂图 维修流程图 射频发射框架图.pdf 华为P8Max 原厂图 维修流程图 射频接收框架图.pdf 华为P8Max 原厂图 维修流程图 扬声器故障.pdf 华为P8Max 原厂图 维修流程图 指南针故障.pdf 华为P8Max 原厂图 维修流程图 按键故障.pdf 华为P8Max 原厂图 维修流程图 无受话.pdf 华为P8Max 原厂图 维修流程图 无送话.pdf 华为P8Max 原厂图 维修流程图 耳机故障.pdf 华为P8Max 原厂图 维修流程图 触摸故障.pdf 华为P8Max 原厂图 维修流程图 重力感应故障.pdf 华为P8Max 原厂图 维修流程图 闪光灯故障.pdf 华为P8Max 原厂图 维修流程图 马达故障.pdf
好的,以下是一个用C语言头层皮套接字方式编写员工管理系统的输入员工信息功能的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #define SERVER_PORT 8080 #define MAXLINE 1024 typedef struct employee { char name[20]; int age; char gender[10]; char department[20]; } Employee; int main() { int sockfd; struct sockaddr_in servaddr; char buffer[MAXLINE]; Employee emp; // 创建socket sockfd = socket(AF_INET, SOCK_STREAM, 0); // 设置服务器地址和端口 memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(SERVER_PORT); inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr); // 连接服务器 connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); // 输入员工信息 printf("请输入员工姓名:"); scanf("%s", emp.name); printf("请输入员工年龄:"); scanf("%d", &emp.age); printf("请输入员工性别:"); scanf("%s", emp.gender); printf("请输入员工部门:"); scanf("%s", emp.department); // 发送员工信息到服务器 send(sockfd, &emp, sizeof(emp), 0); // 接收服务器返回的消息 recv(sockfd, buffer, MAXLINE, 0); printf("%s\n", buffer); // 关闭socket close(sockfd); return 0; } ``` 以上代码中,我们先创建了一个名为`Employee`的结构体,表示员工信息,包括姓名、年龄、性别和部门。然后,我们创建了一个socket,并连接到服务器。接下来,通过`scanf`函数输入员工信息,然后通过`send`函数将员工信息发送到服务器。最后,通过`recv`函数接收服务器返回的消息,并输出到控制台。最后,关闭socket并结束程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彧侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值