android wake lock 电源管理简单学习

需要配置清单文件:<uses-permission android:name="android.permission.WAKE_LOCK" />

也可以参考我之前写的这篇文章:

http://blog.csdn.net/aikongmeng/article/details/39232017

package com.example.wakeup;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.PowerManager;
import android.util.Log;
import android.widget.TextView;

public class MainActivity extends Activity implements SensorEventListener{
	private static final String TAG = "MainActivity";
	private static final String WAKE_LOCK_TAG = "LightTag";
	private PowerManager pm ;
	private PowerManager.WakeLock wl;
	private TextView tv;
	private StringBuilder mBuilder = new StringBuilder(2048);
	private SensorManager mSensorManager;
	private Sensor mLight;
	private Handler handler =new Handler();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tv = (TextView) findViewById(R.id.tv);
		mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
		mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
	}

	@Override
	protected void onResume() {
		super.onResume();
		pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
		wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, WAKE_LOCK_TAG);
		wl.acquire();
	}

	@Override
	protected void onStart() {
		super.onStart();
		mSensorManager.registerListener(this, mLight, SensorManager.SENSOR_DELAY_FASTEST);
		//register broadcasts receiver
		IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
		registerReceiver(mReceiver, filter);  

	}
	@Override
	protected void onPause() {
		super.onPause();
		//release lock
		if (wl!=null) {
			wl.release();
			wl=null;
		}

	}
	@Override
	protected void onDestroy() {
		super.onDestroy();
		mSensorManager.unregisterListener(this);
		unregisterReceiver(mReceiver);  

	}

	@Override
	public void onAccuracyChanged(Sensor sensor, int accuracy) {

	}

	@Override
	public void onSensorChanged(SensorEvent event) {
		Log.i(TAG, "Light Values :"+ event.values[0]);
		mBuilder.insert(0,  event.values[0]+"\n");
		tv.setText(mBuilder.toString());
		tv.invalidate();
	}
	private BroadcastReceiver mReceiver =  new BroadcastReceiver() {

		@Override
		public void onReceive(Context context, Intent intent) {
			if (Intent.ACTION_SCREEN_OFF.equalsIgnoreCase(intent.getAction())) {
				handler.post(new Runnable() {
					@SuppressLint("Wakelock")
					public void run() {
						if (wl != null) {
							wl.release();
							wl=null;
						}
						try {
							System.out.println("Sleeping ...");
							Thread.sleep (3000);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						wl = pm.newWakeLock(
								PowerManager.PARTIAL_WAKE_LOCK
								,
								WAKE_LOCK_TAG);
						wl.acquire();
					}
				});
			}
		}
	};

}

  

时间: 2024-08-08 21:56:36

android wake lock 电源管理简单学习的相关文章

Android电源管理简介(上)

文章转载自:http://blog.csdn.net/hzdysymbol/archive/2009/03/19/4004791.aspx Android Power Management 总体上来说Android的电源管理还是比较简单的, 主要就是通过锁和定时器来切换系统的状态,使系统的功耗降至最低,整个系统的电源管理架构图如下: (注该图来自Steve Guo) 接下来我们从Java应用层面, Android framework层面, Linux内核层面分别进行详细的讨论: 应用层的使用:

Android电源管理-休眠简要分析

工作需要,需要对这一块深入学习.故在此做一点分析记录,存疑解惑. 一.开篇 1.Linux 描述的电源状态 - On(on)                                                 S0 -  Working - Standby (standby)                              S1 -  CPU and RAM are powered but not executed - Suspend to RAM(mem)        

Android 电源管理 -- wakelock机制

转载地址:http://blog.csdn.net/wh_19910525/article/details/8287202 Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠, 可以被用户态程序和内核获得. 这个锁可以是有超时的 或者 是没有超时的, 超时的锁会在时间过去以后自动解锁.如果没有锁了或者超时了, 内核就会启动休眠的那套机制来进入休眠. PowerManager.WakeLock 有加锁和解锁两种状态,加锁的方式有两种: 第一种是永久的锁住,这样的锁除非显式的

Android电源管理简介(下)

文章转载自:http://blog.csdn.net/hzdysymbol/archive/2009/03/19/4004791.aspx Kernel层 其主要代码在下列位置: drivers/android/power.c 其对Kernel提供的接口函数有 EXPORT_SYMBOL(android_init_suspend_lock); //初始化Suspend lock,在使用前必须做初始化 EXPORT_SYMBOL(android_uninit_suspend_lock); //释放

Android 使用Wake Lock

为了延长电池的使用寿命,Android设备会在一段时间后使屏幕变暗,然后关闭屏幕显示,最后停止CPU.WakeLock是一个电源管理系统服务功能,应用程序可以使用它来控制设备的电源状态. WakeLock可以用来保持CPU运行,避免屏幕变暗和关闭,以及避免键盘背光灯熄灭. 注意: 创建和使用Wake Lock会对应用程序造成的电池电量消耗产生显著的影响.因此,最好只在 确实有必要时使用Wake Lock,并且使用它们的时间越少越好,只要有可 能就释放它们. 屏幕Wake Lock通常用于在用户观

Android笔记:Wake Lock

import android.app.Service; import android.content.Context; import android.os.PowerManager; /**  * Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠,  * 可以被用户态程序和内核获得. 这个锁可以是有超时的或者是没有超时的,  * 超时的锁会在时间过去以后自动解锁. 如果没有锁了或者超时了, 内核就  * 会启动休眠的那套机制来进入休眠.  *   * 一.关于int f

Android:PowerManager类 电源管理

PowerManager类用于对设备电源状态进行管理:PowerManager.WakeLock类用于保持设备常亮:Android中通过各种Lock锁对电源进行控制,需要注意的是加锁和解锁必须成对出现. 使用Activity的生命周期,以调用保持屏幕常亮和释放屏幕常亮动作. /** * <功能描述> 保持屏幕常亮 * * @return void [返回类型说明] */ private void keepScreenWake() { // 获取WakeLock锁,保持屏幕常亮 mPowerMa

android 电源管理,屏幕锁 ,小米2s点亮屏幕,解锁

============问题描述============ 我现在进行的是,通信方面的项目.但是当小米2s测试  来电   的时候,屏幕点亮了,但是没有屏幕没有解锁,只有解锁之后才会出现来点界面.问了别人,说是要看android这个方面的底层,我不知道有什么好的解决办法没有? 这个是电源管理以及解锁屏幕的代码: //保持屏幕常亮 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); WakeLock mW

Android 长按电源键关机整个流程小学习

最近研究了一下android关机跟重新启动功能,看了一些长按电源键到弹出关机对话框,到真正关机的一系列处理过程. 首先还是来看看这个长按电源键都干了些什么吧?一般来说,电源键都是接到PMU上的,PMU来判断是长按还短按,当有按键消息产生的时候,系统会有中断,然后去读PMU的状态就可以知道是什么了.笔者以全志平台的AXP209小议一下,先贴上关键代码: static int axp_battery_event(struct notifier_block *nb, unsigned long eve