powermanger API分析
来源:互联网 发布:郑州用友软件总代理 编辑:程序博客网 时间:2024/06/06 10:57
http://blog.chinaunix.net/uid-13995546-id-2850215.html
1) power management api :
WakeLock: 用两个函数来来操作
acquire release , 最终这两个函数将调用 power management 的service .
userActivity: 这个函数让设备回到full on 的状态
public void goToSleep(long time)
强制设备进入sleep状态!public void setBacklightBrightness(int brightness)
public int getSupportedWakeLockFlags()
public boolean isScreenOn()
public void reboot(String reason)
2) power management service 的启动
在systemserver.java run 函数中调用
power = new PowerManagerService();
ServiceManager.addService(Context.POWER_SERVICE, power);
// only initialize the power service after we have started the
// lights service, content providers and the battery service.
power.init(context, lights, ActivityManagerService.getDefault(), battery);
powermanagementservice init:
1) 创建PowerManagerService.mScreenOffThread , 其中在handler 中将要创建looper
a) BrightnessState 的创建
private final BrightnessState mScreenBrightness
= new BrightnessState(SCREEN_BRIGHT_BIT);
b) 通过调用 BrightnessState 的run 函数, 然后调用
--> boolean stepLocked() 这个函数没1000/60 毫秒调用一次,并设置相应的亮度。
如果亮度是screen off, 也就是0, 将调用finishAnimationLocked
关闭 button keypad 的led.
b) setTargetLocked
这个函数将去除以前的动画, 并开始新的亮度设置的动画。
systemReady 当系统service 都设置好后,调用powermanager service systemReady
系统按键的处理:
- void NativeInputManager::interceptKeyBeforeQueueing(nsecs_t when,
- int32_t deviceId, int32_t action, int32_t &flags,
- int32_t keyCode, int32_t scanCode, uint32_t& policyFlags) {
- #if DEBUG_INPUT_DISPATCHER_POLICY
- LOGD("interceptKeyBeforeQueueing - when=%lld, deviceId=%d, action=%d, flags=%d, "
- "keyCode=%d, scanCode=%d, policyFlags=0x%x",
- when, deviceId, action, flags, keyCode, scanCode, policyFlags);
- #endif
- if ((policyFlags & POLICY_FLAG_VIRTUAL) || (flags & AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY)) {
- policyFlags |= POLICY_FLAG_VIRTUAL;
- flags |= AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY;
- }
- // Policy:
- // - Ignore untrusted events and pass them along.
- // - Ask the window manager what to do with normal events and trusted injected events.
- // - For normal events wake and brighten the screen if currently off or dim.
- if ((policyFlags & POLICY_FLAG_TRUSTED)) {
- const int32_t WM_ACTION_PASS_TO_USER = 1;
- const int32_t WM_ACTION_POKE_USER_ACTIVITY = 2;
- const int32_t WM_ACTION_GO_TO_SLEEP = 4;
- bool isScreenOn = this->isScreenOn();
- bool isScreenBright = this->isScreenBright();
- JNIEnv* env = jniEnv();
- jint wmActions = env->CallIntMethod(mCallbacksObj,
- gCallbacksClassInfo.interceptKeyBeforeQueueing,
- when, action, flags, keyCode, scanCode, policyFlags, isScreenOn);
- if (checkAndClearExceptionFromCallback(env, "interceptKeyBeforeQueueing")) {
- wmActions = 0;
- }
- if (!(flags & POLICY_FLAG_INJECTED)) {
- if (!isScreenOn) {
- policyFlags |= POLICY_FLAG_WOKE_HERE;
- flags |= AKEY_EVENT_FLAG_WOKE_HERE;
- }
- if (!isScreenBright) {
- policyFlags |= POLICY_FLAG_BRIGHT_HERE;
- }
- }
- if (wmActions & WM_ACTION_GO_TO_SLEEP) {
- android_server_PowerManagerService_goToSleep(when);
- }
- if (wmActions & WM_ACTION_POKE_USER_ACTIVITY) {
- android_server_PowerManagerService_userActivity(when, POWER_MANAGER_BUTTON_EVENT);
- }
- if (wmActions & WM_ACTION_PASS_TO_USER) {
- policyFlags |= POLICY_FLAG_PASS_TO_USER;
- }
- } else {
- policyFlags |= POLICY_FLAG_PASS_TO_USER;
- }
- }
- powermanger API分析
- 豆瓣开放API分析
- Butterfly API 分析3
- osworkflow API 分析(转)
- 中央气象台天气api分析
- JXL----API 分析
- keystone API接口分析
- Scroller API 分析
- API DEMO LabelView分析
- 蓝牙API分析
- android api分析01
- android api分析02
- android api分析03
- android api分析05
- android api分析10
- OpenStack : Nova API 分析
- ArrayAdapter(API分析)
- dx9 api性能分析
- loadrunner监控Windows之前需要做的准备工作
- 程序员面试题精选100题(25)-在从1到n的正数中1出现的次数
- loadrunner监控Linux之前需要做的准备工作
- 需要学习的DSI
- loadrunner添加SQL Server监视出错解决
- powermanger API分析
- 基于TCP 的服务器、、客户端(socket)
- xp+vs 2003+oracle 9i 环境搭建
- 理解内部类
- Uva11905 连数问题(贪心)
- Hibernate状态 (merge,attachDirty,attachClean)
- 总结一下最近咋做WinCE时用到的调试方法
- C# 取RichTextBox所有图片
- HTML5 WebSocket 技术介绍