PowerManager使用執行個體1(上)

來源:互聯網
上載者:User

標籤:android   des   blog   java   使用   檔案   

檔案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()        {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif(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 stubTextView 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;     }     }    }}     

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.