来源: android锁屏(三) – 老牛比 – CSDN博客
锁屏服务类。1,启动后首先注册接受屏幕的关闭和开启的广播:广播中处理开屏锁屏任务;2,获取电话管理服务,注册通话状态监听:监听手机响铃状态、挂起状态、空闲状态。以Handler方式执行不同的任务。同样这里也是处理闹钟啊一些可以你认为可以在锁屏时候运行的东西。这里我没写,Dome而已,还是凑合看看吧
- import Android.app.KeyguardManager;
- import Android.app.Service;
- import Android.app.KeyguardManager.KeyguardLock;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.os.Handler;
- import android.os.IBinder;
- import android.os.Message;
- import android.os.PowerManager;
- import android.telephony.PhoneStateListener;
- import android.telephony.TelephonyManager;
- import android.util.Log;
- public class LockService extends Service {
- protected static final String TAG = “SAFLockService”;
- KeyguardManager mKeyguardManager;
- private KeyguardLock mKeyguardLock = null;
- private TelephonyManager tm;
- private Context mContext;
- @Override
- public void onCreate() {
- super.onCreate();
- mContext = this.getApplicationContext();
- Log.v(TAG, “=============onCreate:================”);
- IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_SCREEN_OFF);
- filter.addAction(Intent.ACTION_SCREEN_ON);
- registerReceiver(mScreenReceiver, filter);
- mKeyguardManager = (KeyguardManager) this
- .getSystemService(Context.KEYGUARD_SERVICE);
- mKeyguardLock = mKeyguardManager.newKeyguardLock(“”);
- mKeyguardLock.disableKeyguard();
- tm = (TelephonyManager) this
- .getSystemService(Context.TELEPHONY_SERVICE);
- SAFLockPhoneCallListener myPhoneCallListener = new SAFLockPhoneCallListener();
- tm.listen(myPhoneCallListener, PhoneStateListener.LISTEN_CALL_STATE);
- SAFLockConstants.loadInitParam(this);
- this.setForeground(true);
- }
- @Override
- public IBinder onBind(Intent intent) {
- return null;
- }
- @Override
- public void onDestroy() {
- super.onDestroy();
- mKeyguardLock.reenableKeyguard();
- mHandler.removeMessages(SAFLockConstants.EVENT_LOCK_SCREEN);
- unregisterReceiver(mScreenReceiver);
- }
- /**
- * set a listener to listen the phonestate,that we can do somthing by one
- * of phonestates.
- *
- * @author liao
- */
- public class SAFLockPhoneCallListener extends PhoneStateListener {
- public void onCallStateChanged(int state, String incomingNumber) {
- switch (state) {
- // Phone in idle
- case TelephonyManager.CALL_STATE_IDLE:
- Log.v(TAG, “=============CALL_STATE_IDLE:================”);
- SAFLockConstants.PHONE_STATE = TelephonyManager.CALL_STATE_IDLE;
- if (SAFLockConstants.isLockecd) {
- mHandler.removeMessages(SAFLockConstants.EVENT_LOCK_SCREEN);
- mHandler.sendEmptyMessage(SAFLockConstants.EVENT_LOCK_SCREEN);
- }
- break;
- // Phone is hung up
- case TelephonyManager.CALL_STATE_OFFHOOK:
- Log.v(TAG, “=============CALL_STATE_OFFHOOK:================”);
- SAFLockConstants.PHONE_STATE = TelephonyManager.CALL_STATE_OFFHOOK;
- break;
- // Cell phone ring
- case TelephonyManager.CALL_STATE_RINGING:
- Log.v(TAG, “=============CALL_STATE_RINGING:================”);
- SAFLockConstants.PHONE_STATE = TelephonyManager.CALL_STATE_RINGING;
- break;
- default:
- Log.v(TAG, “=============default:================”);
- break;
- }
- }
- }
- private Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case SAFLockConstants.EVENT_LOCK_SCREEN:
- // ====read user customization
- SAFLockConstants.updateLockIntent(
- “saf.cmcc.lock.THEME_DEFAULT”, mContext);
- // keep the task running 2s in sleeping mode.
- PowerManager pm = (PowerManager) mContext
- .getSystemService(Context.POWER_SERVICE);
- // Keep the CPU running, and the screen and keyboard light may
- // be closed.
- PowerManager.WakeLock mWakeLock = pm.newWakeLock(
- PowerManager.PARTIAL_WAKE_LOCK, “SAFLock”);
- mWakeLock.acquire(2000L);
- Intent mLockScreenIntent = new Intent(mContext,
- SAFFullScreenActivity.class);
- mLockScreenIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- mLockScreenIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
- mContext.startActivity(mLockScreenIntent);
- break;
- default:
- break;
- }
- }
- };
- private BroadcastReceiver mScreenReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (Intent.ACTION_SCREEN_OFF.equalsIgnoreCase(action)) {
- // load intent
- if (SAFLockConstants.LOCK_ENABLE
- && SAFLockConstants.PHONE_STATE == TelephonyManager.CALL_STATE_IDLE) {
- // =====send message after a short delay
- if (!SAFLockConstants.isLockecd) {
- mHandler.removeMessages(SAFLockConstants.EVENT_LOCK_SCREEN);
- mHandler.sendEmptyMessageDelayed(
- SAFLockConstants.EVENT_LOCK_SCREEN, 100);
- }
- }
- } else if (Intent.ACTION_SCREEN_ON.equalsIgnoreCase(action)) {
- // ====remove unprocessed event.
- mHandler.removeMessages(SAFLockConstants.EVENT_LOCK_SCREEN);
- }
- }
- };
- }
注释是英文的,上头要求,没办法