package com.sandro.mamanger; import android.app.KeyguardManager; import android.app.KeyguardManager.OnKeyguardExitResult; import android.content.Context; import android.content.Intent; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.WindowManager; import com.sandro.ImageTrans.MainApp; import com.sandro.ImageTrans.R; import com.sandro.ImageTrans.ScreenSaverReceiver; import com.sandro.custom.view.ScreenSaverBackView; import com.sandro.custom.view.ScreenSaverView; public class ScreenSaverManager implements TouchListener{ private KeyguardManager keyguardManager; private KeyguardManager.KeyguardLock keyguardLock; private ScreenSaverView screenSaverView; private WindowManager.LayoutParams screenSaverViewParams = new WindowManager.LayoutParams(); private ScreenSaverBackView screenBackSaverView; private WindowManager.LayoutParams screenBackSaverViewParams = new WindowManager.LayoutParams(); private WindowManager mWindowManager; private boolean screenShow; public ScreenSaverManager(){ mWindowManager = (WindowManager) MainApp.getContext().getSystemService(Context.WINDOW_SERVICE); keyguardManager = (KeyguardManager)MainApp.getContext().getSystemService(Context.KEYGUARD_SERVICE); keyguardLock = keyguardManager.newKeyguardLock(Context.KEYGUARD_SERVICE); LayoutInflater inflater = LayoutInflater.from(MainApp.getContext()); createSaverView(inflater); createSaverBackView(inflater); } /** * 创建背景view */ private void createSaverBackView(LayoutInflater inflater){ screenBackSaverView= (ScreenSaverBackView)inflater.inflate( R.layout.screen_saver_back_splash_layout, null); screenBackSaverViewParams.width = WindowManager.LayoutParams.FILL_PARENT; screenBackSaverViewParams.height = WindowManager.LayoutParams.FILL_PARENT; // if (android.os.Build.VERSION.SDK_INT > 10) { screenBackSaverViewParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; screenBackSaverViewParams.flags = WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; // } else { // screenBackSaverViewParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; // screenBackSaverViewParams.flags =WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; // } } /** * 创建主页面 */ private void createSaverView(LayoutInflater inflater) { screenSaverView = (ScreenSaverView) inflater.inflate( R.layout.screen_saver_splash_layout, null); screenSaverViewParams.width = WindowManager.LayoutParams.FILL_PARENT; screenSaverViewParams.height = WindowManager.LayoutParams.FILL_PARENT;//params.flags |= WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; params.flags |= WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD; if (android.os.Build.VERSION.SDK_INT > 10) { screenSaverViewParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; screenSaverViewParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; } else { screenSaverViewParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY; screenSaverViewParams.flags = WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; } } public void showScreenSaver() { if (screenShow) return; keyguardLock.disableKeyguard(); mWindowManager.addView(screenBackSaverView, screenBackSaverViewParams); Log.i("ScreenSaverManager", "screenBackSaverViewParams type : "+ screenBackSaverViewParams.type + " ,flags : " + screenBackSaverViewParams.flags); mWindowManager.addView(screenSaverView, screenSaverViewParams); Log.i("ScreenSaverManager", "screenSaverViewParams type : " + screenSaverViewParams.type + " flags : " + screenSaverViewParams.flags); screenBackSaverView.registTouchListener(this); screenShow = true; } public void closeScreenView() { if (screenShow) { screenBackSaverView.unRegistTouchListener(); mWindowManager.removeView(screenSaverView); mWindowManager.removeView(screenBackSaverView); screenSaverViewParams.x = 0; screenShow = false; keyguardManager.exitKeyguardSecurely(new OnKeyguardExitResult() { @Override public void onKeyguardExitResult(boolean success) { keyguardLock.reenableKeyguard(); } }); } } @Override public void onBackViewTouch(MotionEvent event) { final int action = event.getAction(); final float x = event.getX(); Log.i("ScreenSaverBackView", "onTouchEvent action : " + action + " ,x : " + x); switch (action) { case MotionEvent.ACTION_MOVE: screenSaverViewParams.x = (int)x; mWindowManager.updateViewLayout(screenSaverView, screenSaverViewParams); break; case MotionEvent.ACTION_UP: Intent intent = new Intent(); intent.setAction(ScreenSaverReceiver.ACTION_SCREEN_SAVER_CLOSE);// 发出自定义广播 MainApp.getContext().sendBroadcast(intent); break; } } }