键盘灯功能。开放底层节点操作所需权限和se权限。avc权限问题

frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

在public intinterceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {方法中处理按键

加入

    StringLED_PATH ="/sys/class/leds/keyboard-backlight/brightness";
            if(keyCode !=KeyEvent.KEYCODE_VOLUME_UP && keyCode != KeyEvent.KEYCODE_VOLUME_DOWN
               && keyCode !=KeyEvent.KEYCODE_VOICE_ASSIST && keyCode !=KeyEvent.KEYCODE_TV_DATA_SERVICE && keyCode !=KeyEvent.KEYCODE_TV_RADIO_SERVICE ){
            if(down){
            mHandler3.removeMessages(0);
           controlBrightness("1",LED_PATH);
            }else if (event.getAction() ==KeyEvent.ACTION_UP){
            mHandler3.postDelayed(new Runnable() {
                            public void run() {
                               controlBrightness("0",LED_PATH);
                            }
                        }, 3000);
            }
            }

所需方法

    privatevoid controlBrightness(String commod,String Path) {
            BufferedWriter bufWriter;
            try {
                bufWriter = new BufferedWriter(newFileWriter(Path));
                bufWriter.write(commod);
                bufWriter.close();
            } catch (IOException e) {
                Log.e("KeyboardLight"," ***controlRedBrightness ERROR*** Here is what I know:"
                 + e.getMessage());
                e.printStackTrace();
            }                                                           
        }
     
    导包import java.io.BufferedWriter;
    importjava.io.FileWriter;
    importjava.io.IOException;

新开一个mHandler3,避免之前的mHandler已经移除了消息或执行了什么消息。

这里面是去掉了一些侧键和音量键,通过写底层键盘灯节点的方式进行

这个节点需要写权限,

开放底层节点操作所需权限和se权限,这里以键盘灯和音量旋钮节点为例

首先先在device/droi/pl2281_zrk/init.project.rc

开放上层节点操作权限,加入

    chownsystem system /sys/devices/platform/rotary_pwr/rotary_power
        chmod 666/sys/devices/platform/rotary_pwr/rotary_power
     
        chmod 666/sys/class/leds/keyboard-backlight/brightness
        chown system system/sys/class/leds/keyboard-backlight/brightness

这里的路径其实是软路径,并不代表就一定是底层真实路径,不过上层就可以用这个来操作了,此时还有SeLinux权限需要开放,会报avc权限问题

device/mediate/目录下,当然在device/droi下面也行

sepolicy/basic/non_plat/file.te定义需要开放节点的名称

    +#ledkeyborad
    +type sysfs_leds_keyboradlight,fs_type, sysfs_type, mlstrustedsubject;
    +type sysfs_rotary_status,fs_type, sysfs_type, mlstrustedsubject;

注意sysfs_leds_keyboradlight这个名称前面的sysfs_是固定的,后面自定义名称,有点类似SystemProperties.get("persist.sys.packageinstall.status","0"))

后面的fs_type,sysfs_type, mlstrustedsubject 就是固定格式让他作为系统可开放的类型

然后在sepolicy/basic/non_plat/file_contexts

匹配对应真实路径

+#led keyborad
+/sys/devices/platform/leds-mt65xx/leds/keyboard-backlight/brightnessu:object_r:sysfs_leds_keyboradlight:s0
+/sys/devices/platform/rotary_pwr/rotary_statusu:object_r:sysfs_rotary_status:s0

这里就是真实路径,然后这个格式固定u:object_r:sysfs_leds_keyboradlight:s0

替换名称就行,就是规定se规则到这个节点为false,跳过

有些节点没有软路径就是真实路径,比如这里的旋钮节点,但是键盘灯节点就有这个底层真实路径,结合之前的状态灯节点也同理,

查看节点的真实路径,adbshell 后su模式

ls –l 上层应用节点 看看是否有指向真实路径

最后就是真正执行这节点开放的是

sepolicy/basic/non_plat/system_server.te

+#led keyborad
+allow system_server sysfs_leds_keyboradlight:dirsearch;
+allow system_server sysfs_leds_keyboradlight:filerw_file_perms;
+allow system_server sysfs_rotary_status:filerw_file_perms;

就是开放正常的读写权限,注意这边键盘灯操作是在framework层调用,最后报的也是system_server给的avc不足,反之如果是系统apk或者内置的应用需要权限的话

就在

sepolicy/basic/non_plat/system_app.te

加入,就是换一个类型system_app

+#led keyborad
+allow system_appsysfs_leds_keyboradlight:dir search;
+allow system_appsysfs_leds_keyboradlight:file rw_file_perms;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Youth King

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

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

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

打赏作者

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

抵扣说明:

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

余额充值