注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

民主与科学

独立之人格,自由之思想

 
 
 

日志

 
 

PowerManager使用实例1(上)  

2011-06-03 19:45:58|  分类: 深入研究 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

文件1 MainActivity.java:

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.PowerManager;
import android.os.SystemClock;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{
    /** Called when the activity is first created. */
final static int kStateKey=R.id.StateKey;
final static int kTextTurnOnKey=R.id.TextTurnOnKey;
final static int kTextTurnOffKey=R.id.TextTurnOffKey;
final static String kStateOff="off";
final static String kStateOn="on";
PowerManager pm;
PowerManager.WakeLock wl;
final static String tag="robin"; 
Handler handler=new MyHandler();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button btn=null;
        Resources res=this.getResources();
        for(int i=R.id.Button0;i<=R.id.Button5;i++)
        {
        btn=(Button)findViewById(i);
        btn.setTag(kStateKey, kStateOff);
       if(i==R.id.Button0)
       {
        btn.setTag(kTextTurnOnKey,res.getString(R.string.acquire_PARTIAL));
        btn.setTag(kTextTurnOffKey,res.getString(R.string.release_PARTIAL));
       }
       else if(i==R.id.Button1)
       {
        btn.setTag(kTextTurnOnKey,res.getString(R.string.acquire_SCREEN_DIM));
        btn.setTag(kTextTurnOffKey,res.getString(R.string.release_SCREEN_DIM));
       }
       else if(i==R.id.Button2)
       {
        btn.setTag(kTextTurnOnKey,res.getString(R.string.acquire_SCREEN_BRIGHT));
        btn.setTag(kTextTurnOffKey,res.getString(R.string.release_SCREEN_BRIGHT));
       }
       else if(i==R.id.Button3)
       {
        btn.setTag(kTextTurnOnKey,res.getString(R.string.acquire_FULL_WAKE_LOCK));
        btn.setTag(kTextTurnOffKey,res.getString(R.string.release_FULL_WAKE_LOCK));
       }
       else if(i==R.id.Button4)
       {
        btn.setTag(kTextTurnOnKey,res.getString(R.string.combineFlag0));
        btn.setTag(kTextTurnOffKey,res.getString(R.string.notCombineFlag0));
       }
       else if(i==R.id.Button5)
       {
        btn.setTag(kTextTurnOnKey,res.getString(R.string.combineFlag1));
        btn.setTag(kTextTurnOffKey,res.getString(R.string.notCombineFlag1));
       }
       btn.setText((String)btn.getTag(kTextTurnOnKey));
       btn.setOnClickListener(this);
        }
        OnClickListener listener=new OnClickListener()
        {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId()==R.id.Button6)
{
pm.goToSleep(SystemClock.uptimeMillis());
}
else if (v.getId()==R.id.Button7)
{
pm.reboot("robin test the reboot api");
}
else if(v.getId()==R.id.Button8)
{
  Message msgSend=handler.obtainMessage(kCmdUserActivity, 10, 0);
    handler.sendMessageDelayed(msgSend, 35*1000);
}
}
       
        };
        btn=(Button)findViewById(R.id.Button6);
        btn.setOnClickListener(listener);
        btn=(Button)findViewById(R.id.Button7);
        btn.setOnClickListener(listener);
        btn=(Button)findViewById(R.id.Button8);
        btn.setOnClickListener(listener);
        pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    }
    int mFlag=0;
    long time=0;
    public void onClick(View v) {
    time=System.currentTimeMillis();
// TODO Auto-generated method stub
TextView tv=(TextView)v;
int id=tv.getId();
if(id==R.id.Button4)
{
if(v.getTag(kStateKey).equals(kStateOff))
{
mFlag|=PowerManager.ACQUIRE_CAUSES_WAKEUP;
}
else
{
mFlag=mFlag&~PowerManager.ACQUIRE_CAUSES_WAKEUP;
}
}
else if(id==R.id.Button5)
{
if(v.getTag(kStateKey).equals(kStateOff))
{
mFlag|=PowerManager.ON_AFTER_RELEASE;
}
else
{
mFlag=mFlag&~PowerManager.ON_AFTER_RELEASE;
}
}
else
{
if(v.getTag(kStateKey).equals(kStateOff))
{
unReleaseOtherLock(id);
int flag=0;
if(id==R.id.Button0)
{
flag=PowerManager.PARTIAL_WAKE_LOCK;
}
else if (id==R.id.Button1)
{
flag=PowerManager.SCREEN_DIM_WAKE_LOCK;
}
else if(id==R.id.Button2)
{
flag=PowerManager.SCREEN_BRIGHT_WAKE_LOCK;
}
else if(id==R.id.Button3)
{
flag=PowerManager.FULL_WAKE_LOCK;
}
if(id!=R.id.Button0)
{
flag=flag|mFlag;
}
if(mFlag==0||id==R.id.Button0)
{
wl = pm.newWakeLock(flag,tag);
wl.acquire();
}
else
{
int delayMillis=1;
if((mFlag&PowerManager.ACQUIRE_CAUSES_WAKEUP)!=0)
delayMillis=50*1000;
Message msg=handler.obtainMessage(kCmdAcquireLock, flag, 0);
handler.sendMessageDelayed(msg, delayMillis);
if((mFlag&PowerManager.ON_AFTER_RELEASE)!=0)
{
msg=handler.obtainMessage(kCmdReleaseLock, flag, 0);
delayMillis=delayMillis+20*1000;
handler.sendMessageDelayed(msg, delayMillis);
}
}
}
else if(wl!=null)
{
wl.release();
wl=null;
}
}
if(v.getTag(kStateKey).equals(kStateOff))
{
tv.setTag(kStateKey, kStateOn);
tv.setText((String)tv.getTag(kTextTurnOffKey));
Log.i(tag, "set to turn off in onclick");
}
else
{
tv.setTag(kStateKey, kStateOff);
tv.setText((String)tv.getTag(kTextTurnOnKey));
Log.i(tag, "set to turn on in onclick");
}
}
    void unReleaseOtherLock(int id)
    {
    handler.removeMessages(kCmdAcquireLock);
    handler.removeMessages(kCmdReleaseLock);
    if(wl!=null)
    {
    wl.release();
    wl=null;
    }
    Button btn=null;
    for(int i=R.id.Button0;i<=R.id.Button3;i++)
    {
    if(id==i)
    continue;
    btn=(Button)findViewById(i);
    btn.setTag(kStateKey, kStateOff);
    btn.setText((String)btn.getTag(kTextTurnOnKey));
    Log.i(tag, "set to"+btn.getText());
    }
    }
    public void onResume()
    {
    time=System.currentTimeMillis();
    Log.i(tag,"OnResume");
    super.onResume();
    }
    public void onPause()
    {
    long t=(System.currentTimeMillis()-time)/1000;
    Log.i(tag,"pause after user activity time:"+t);
    super.onPause();
    }
    public void onDestroy()
    {
    if(wl!=null)
    {
    wl.release();
    wl=null;
    }
    super.onDestroy();
    }
    final static int kCmdAcquireLock=0;
    final static int kCmdReleaseLock=1;
    final static int kCmdUserActivity=2;
    class MyHandler extends Handler
    {
    public void handleMessage (Message msg) 
    {
    switch(msg.what)
    {
    case kCmdAcquireLock:
    int flag=msg.arg1;
wl = pm.newWakeLock(flag,tag);
wl.acquire();
    break;
    case kCmdReleaseLock:
if(wl!=null)
{
wl.release();
wl=null;
}
break;
    case kCmdUserActivity:
    pm.userActivity(SystemClock.uptimeMillis(), true);
    int loopCnt=msg.arg1;
    if(loopCnt-->0)
    {
    Message msgSend=handler.obtainMessage(kCmdUserActivity, loopCnt, 0);
    handler.sendMessageDelayed(msgSend, 20*1000);
    }
    break;
    }
    }
    }
}

  评论这张
 
阅读(1204)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017