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;
    }
    }
    }
}
文件2 layout\main.xml:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
        <Button
    android:id="@+id/Button0" 
android:layout_width="wrap_content" android:layout_height="wrap_content"
></Button>
    <Button
    android:id="@+id/Button1" 
android:layout_width="wrap_content" android:layout_height="wrap_content"
></Button>
<Button
android:id="@+id/Button2" 
android:layout_width="wrap_content" android:layout_height="wrap_content"
></Button>
<Button
android:id="@+id/Button3" 
android:layout_width="wrap_content" android:layout_height="wrap_content"
></Button>
<Button
android:id="@+id/Button4" 
android:layout_width="wrap_content" android:layout_height="wrap_content"
></Button>
<Button
android:id="@+id/Button5" 
android:layout_width="wrap_content" android:layout_height="wrap_content"
></Button>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
<Button
android:id="@+id/Button6" 
android:text="@string/sleep"
android:layout_width="wrap_content" android:layout_height="wrap_content"
></Button>
<Button
android:id="@+id/Button7" 
android:text="@string/reboot"
android:layout_width="wrap_content" android:layout_height="wrap_content"
></Button>
</LinearLayout>
<Button
android:id="@+id/Button8" 
android:text="@string/userActivity"
android:layout_width="wrap_content" android:layout_height="wrap_content"
></Button>
</LinearLayout>

文件3 values\strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, MainActivity!</string>
    <string name="app_name">PowerMangerSample</string>
     <string name="acquire_PARTIAL">acquire PARTIAL_WAKE_LOCK</string>
     <string name="release_PARTIAL">release PARTIAL_WAKE_LOCK</string>
     <string name="acquire_SCREEN_DIM">acquire SCREEN_DIM_WAKE_LOCK</string>
     <string name="release_SCREEN_DIM">release SCREEN_DIM_WAKE_LOCK</string>
     <string name="acquire_SCREEN_BRIGHT">acquire SCREEN_BRIGHT_WAKE_LOCK</string>
     <string name="release_SCREEN_BRIGHT">release SCREEN_BRIGHT_WAKE_LOCK</string>
     <string name="acquire_FULL_WAKE_LOCK">acquire FULL_WAKE_LOCK_WAKE_LOCK</string>
     <string name="release_FULL_WAKE_LOCK">release FULL_WAKE_LOCK_WAKE_LOCK</string>
     <string name="combineFlag0">combine with ACQUIRE_CAUSES_WAKEUP</string>
     <string name="notCombineFlag0">not combine with ACQUIRE_CAUSES_WAKEUP</string>
     <string name="combineFlag1">combine with ON_AFTER_RELEASE</string>
     <string name="notCombineFlag1">not combine with ON_AFTER_RELEASE</string>
     <string name="sleep">go sleep</string>
     <string name="reboot">reboot</string>
     <string name="userActivity">userActivity</string>
</resources>

文件4 values\ids.xml:

<resources>
    <item type="id" name="StateKey" />
    <item type="id" name="TextTurnOnKey" />
    <item type="id" name="TextTurnOffKey" />
</resources>

文件5 AndroidManifest.xml

<? xml version = "1.0" encoding = "utf-8" ?>
<manifest xmlns:android = "http://schemas.android.com/apk/res/android"
      package = "com.teleca.robin"
      android:versionCode = "1"
      android:versionName = "1.0" >
    <application android:icon = "@drawable/icon" android:label = "@string/app_name" >
        <activity android:name = ".MainActivity"
                  android:label = "@string/app_name" >
            <intent-filter>
                <action android:name = "android.intent.action.MAIN" />
                <category android:name = "android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-sdk android:minSdkVersion = "8" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DEVICE_POWER"/>
<uses-permission android:name="android.permission.REBOOT"/>
</manifest>  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值