Android平台Power键处理机制

1. 简介

        Android4.x在Framework的PhoneWindowManager在监听按键事件的时候对Power(KeyEvent.KEYCODE_POWER)和Home(KeyEvent.KEYCODE_HOME)键做了处理,不会把这些键传送上层应用程序。如需要把这些键发送给Activity和Service,需要在PhoneWindowManager处理这些键时“发送一个广播出去,然后在应用程序接收到广播后做处理”。

       如果应用程序只需要获取获取待机、唤醒、关机、网络状态变化消息,则可监听以下广播消息:
      1) 待机:广播消息:android.intent.action.SCREEN_OFF (代码)
      2) 唤醒:广播消息:android.intent.action.SCREEN_ON (代码)
      3) 关机:广播消息:android.intent.action.ACTION_SHUTDOWN (XML或代码)
      4) 网络状态变化:广播消息:android.net.conn.CONNECTIVITY_CHANGE (XML或代码)
       然后调用下面的isNetworkAvailable获取当前网络状态。
       public static boolean isNetworkAvailable(Context context) { 
            ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);  
            NetworkInfo[] info = mgr.getAllNetworkInfo();  
            if (info != null) {  
                for (int i = 0; i < info.length; i++) {  
                   if (info[i].getState() == NetworkInfo.State.CONNECTED) {  
                      return true;  
                    }  
                 }  
              }  
             return false;  
         }

2. 短按Power键处理流程

     源代码相关文件:

    /frameworks/base/services/java/com/android/server/WindowManagerService.java(事件分发给最前面的窗口)

    /frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java(拦截消息处理类)

    /frameworks/base/core/java/android/view/KeyEvent.java(按键事件定义)

    /frameworks/base/services/java/com/android/server/InputManager.Java(Java层输入管理)

    /frameworks/base/libs/ui/InputManager.cpp(native层输入管理)

    /frameworks/base/libs/ui/InputReader.cpp(事件读取线程)

    /frameworks/base/libs/ui/InputDispatcher.cpp(事件分发线程)

    /frameworks/base/libs/ui/EventHub.cpp(键码与键值转换)

    / frameworks/base/services/jni/com_android_server_InputManager.cpp(本地NativeInputManager)

    短按Power键处理流程如下图所示:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值