现在的位置: 首页 > 综合 > 正文

Android-4.0.4 添加触摸屏按键处理及java中使用重定位命令

2018年09月07日 ⁄ 综合 ⁄ 共 2252字 ⁄ 字号 评论关闭

某公司的产品中,有一个在触摸屏上叫做手电筒的按键。我的工作就实现这样一件事情:通过手电筒按键控制闪光灯的亮灭。在android系统上做这么一个东西没有什么思路啊。

于是google一下,发现以下链接一个 ,参考这个链接就会明白设置流程,就不细说了,链接在文章后面给出。

目标:通过手电筒按键控制闪关灯亮灭。

已有资源:驱动部分,驱动工程师已经做好,并且提供了通过读写一个state的文件方法来点亮灯。

cat xxx/state                                                    //查看灯的亮灭状态

echo "torch" > xxx/state                                 //点灯

echo "off" > xxx/state                                     //灭灯

下面是我在android4.0.4系统源码修改的文件清单:

frameworks/base/include/ui/KeycodeLabels.h

frameworks/base/native/include/android/keycodes.h

frameworks/base/libs/ui/Input.cpp

frameworks/base/core/res/res/values/attrs.xml

frameworks/base/data/keyboards/Generic.kl

frameworks/base/core/java/android/view/KeyEvent.java

frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

1、修改指定的文件后,执行make update-api。
2、编译系统,烧写镜像。

具体每一个修改的介绍,我就不详细介绍了,主要是免去大家修改4.0.4系统的时候,不用再去找具体的修改文件位置。在这里我主要详细介绍一下java中使用重定位部分。

java中使用exec来实现执行shell命令,但是执行ls这些命令还比较简单,执行我上述所给出的命令可能就要花点功夫去弄了。我是说对于像我这种java基础不太好的人,java大神请勿喷。

 public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags) {

。。。

else if (keyCode == KeyEvent.KEYCODE_GPS){
   System.out.println("######press gps");
   if (down && repeatCount == 0) {

    try {
    Process p;
    BufferedReader br;
     InputStreamReader isr;
     FileInputStream is;
     String state;
     File file = new File("/sys/class/camera_led/ctrl/state");
     is = new FileInputStream(file);
     isr = new InputStreamReader(is);
     br = new BufferedReader(isr);
     state = br.readLine();
   

     if(state.toString().equals("off")){

      p = Runtime.getRuntime().exec("sh");
      String cmd1 = new String("echo \"torch\" > /sys/class/camera_led/ctrl/state\n");
      p.getOutputStream().write(cmd1.getBytes());
      p.getOutputStream().flush();
     
     }
     else {
      p = Runtime.getRuntime().exec("sh");
      String cmd1 = new String("echo \"off\" > /sys/class/camera_led/ctrl/state\n");
      p.getOutputStream().write(cmd1.getBytes());
      p.getOutputStream().flush();

     }
     br.close();
     isr.close();
    } catch (IOException e) {
     e.printStackTrace();
    }

    return 0;
       
    
            }

 

  }else if (keyCode == KeyEvent.KEYCODE_MENU) {
   // Hijack modified menu keys for debugging features
   final int chordBug = KeyEvent.META_SHIFT_ON;

 。。。

}

 

参考文章:http://blog.csdn.net/acm2008/article/details/7065546

 

 

 

 

抱歉!评论已关闭.