zoukankan      html  css  js  c++  java
  • PowerManager使用实例1(上)

    文件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;
         }
         }
        }
    }
     
     
     
     
     
  • 相关阅读:
    Mandriva Flash: 到处可用的口袋 Linux
    Pidgin 衔接 Google Talk 的设置配备铺排
    5 个使 Vim 更易用的脚本
    Bash 运用才干大补贴
    915Resolution打点宽屏表现标题问题
    Linux下误删root目次
    惠普推出 Linux 迷你条记本
    weblogic8.1for linux ES3.0拆卸与设置
    英俊的 Linux Mini PC
    Zonbu-售价 99 美元的袖珍电脑
  • 原文地址:https://www.cnblogs.com/liyuzhao/p/3818172.html
Copyright © 2011-2022 走看看