package com.isoft.screen;
import java.lang.reflect.Method;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.PowerManager;
import android.util.Log;
/**
*
* @author zhangyg
*
*/
public class ScreenObserver{
private static String TAG = "ScreenObserver";
private Context mContext;
private ScreenBroadcastReceiver mScreenReceiver;
private ScreenStateListener mScreenStateListener;
private static Method mReflectScreenState;
public ScreenObserver(Context context){
mContext = context;
mScreenReceiver = new ScreenBroadcastReceiver();
try {
mReflectScreenState = PowerManager.class.getMethod("isScreenOn",
new Class[] {});
} catch (NoSuchMethodException nsme) {
Log.d(TAG, "API < 7," + nsme);
}
}
/**
* screen状态广播接收者
* @author zhangyg
*
*/
private class ScreenBroadcastReceiver extends BroadcastReceiver{
private String action = null;
@Override
public void onReceive(Context context, Intent intent) {
action = intent.getAction();
if(Intent.ACTION_SCREEN_ON.equals(action)){
mScreenStateListener.onScreenOn();
}else if(Intent.ACTION_SCREEN_OFF.equals(action)){
mScreenStateListener.onScreenOff();
}
}
}
/**
* 请求screen状态更新
* @param listener
*/
public void requestScreenStateUpdate(ScreenStateListener listener) {
mScreenStateListener = listener;
startScreenBroadcastReceiver();
firstGetScreenState();
}
/**
* 第一次请求screen状态
*/
private void firstGetScreenState(){
PowerManager manager = (PowerManager) mContext
.getSystemService(Activity.POWER_SERVICE);
if (isScreenOn(manager)) {
if (mScreenStateListener != null) {
mScreenStateListener.onScreenOn();
}
} else {
if (mScreenStateListener != null) {
mScreenStateListener.onScreenOff();
}
}
}
/**
* 停止screen状态更新
*/
public void stopScreenStateUpdate(){
mContext.unregisterReceiver(mScreenReceiver);
}
/**
* 启动screen状态广播接收器
*/
private void startScreenBroadcastReceiver(){
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
mContext.registerReceiver(mScreenReceiver, filter);
}
/**
* screen是否打开状态
* @param pm
* @return
*/
private static boolean isScreenOn(PowerManager pm) {
boolean screenState;
try {
screenState = (Boolean) mReflectScreenState.invoke(pm);
} catch (Exception e) {
screenState = false;
}
return screenState;
}
public interface ScreenStateListener {
public void onScreenOn();
public void onScreenOff();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
ScreenObserver.zip (30个子文件)
ScreenObserver
bin
classes.dex 6KB
res
drawable-ldpi
ic_launcher.png 2KB
drawable-hdpi
ic_launcher.png 4KB
drawable-mdpi
ic_launcher.png 2KB
ScreenObserver.apk 15KB
classes
com
isoft
screen
ScreenObserverActivity.class 2KB
R$layout.class 388B
R$drawable.class 401B
ScreenObserver$ScreenStateListener.class 285B
R$attr.class 334B
R.class 477B
ScreenObserver.class 3KB
R$string.class 421B
ScreenObserverActivity$1.class 932B
ScreenObserver$ScreenBroadcastReceiver.class 2KB
resources.ap_ 10KB
res
drawable-ldpi
ic_launcher.png 2KB
drawable-hdpi
ic_launcher.png 4KB
values
strings.xml 188B
drawable-mdpi
ic_launcher.png 3KB
layout
main.xml 387B
assets
gen
com
isoft
screen
R.java 622B
proguard.cfg 1KB
src
com
isoft
screen
ScreenObserver.java 3KB
ScreenObserverActivity.java 1022B
.project 817B
ScreenStateListener.java 132B
.classpath 356B
project.properties 360B
AndroidManifest.xml 721B
共 30 条
- 1
程序员长弓
- 粉丝: 655
- 资源: 46
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页