【SQL开源代码栏目提醒】:网学会员,鉴于大家对SQL开源代码十分关注,论文会员在此为大家搜集整理了“安卓屏幕保护代码 - 其它资料”一文,供大家参考学习!
package cslg.protectimport java.
sql.Dateimport javax.security.auth.PrivateCredentialPer
missionimport android.R.integerimport android.app.Activityimport android.app.AlertDialogimport android.content.DialogInterfaceimport android.graphics.Bitmapimport android.graphics.BitmapFactoryimport android.graphics.Matriximport android.graphics.drawable.BitmapDrawableimport android.os.Bundleimport android.os.Handlerimport android.util.DisplayMetricsimport android.util.Logimport android.view.KeyEventimport android.view.LayoutInflaterimport android.view.Menuimport android.view.MenuItemimport android.view.MotionEventimport android.view.Viewimport android.view.Windowimport android.view.WindowManagerimport android.widget.EditTextimport android.widget.ImageViewimport android.widget.TextViewpublic class ProtectActivity extends Activity / Called when the activity is first created. / private TextView mTextView01 private ImageView mImageView01 private LayoutInflater mInflater01 //输入解锁的 View private View mView01 private EditText mEditText01mEditText02 static final private int MENU_ABOUT Menu.FIRST static final private int MENU_EXIT Menu.FIRST1 private Handler mHandler01new Handler private Handler mHandler02new Handler private Handler mHandler03new Handler private Handler mHandler04new Handler //控制 User 静止与否的 Counter private int intCounter1 intCounter2 //控制 FadeIn 和 FadeOut 的 Counter; private int intCounter3 intCounter4 //控制顺序替换背景图 ID 的 Counter; private int intDrawable0 //上一次 User 有动作的 Time Stamp ; private Date lastUpdateTime //计算 User 共几秒没有动作; private long timePeriod //静止超过 n 秒将自动进入屏幕保护状态; private float fHoldStillSecondfloat 5 private boolean bIfRunScreenSaver private boolean bFadeFlagOutbFadeFlagIn false private long intervalScreenSaver1000 private long intervalKeypadesSaver1000 private long intervalFade100 private int screenWidthscreenHeight //每 n 秒置换图片; private int intSecondsToChange5 //设置 Screen Saver 需要用到的背景图。
private static int screenDrawable new int R.drawable.screen1 R.drawable.screen2 R.drawable.screen3 R.drawable.screen4 R.drawable.screen5 Overridepublic void onCreateBundle savedInstanceState super.onCreatesavedInstanceState //在//setContentView 之前调用全屏幕显示; requestWindowFeatureWindow.FEATURE_NO_TITLE getWindow.setFlags WindowManager.LayoutParams.FLAG_FULLSCREEN WindowManager.LayoutParams.FLAG_FULLSCREENsetContentViewR.layout.main//onCreateView all Widget mTextView01TextViewfindViewByIdR.id.myTextView1 mImageView01ImageViewfindViewByIdR.id.myImageView1 mEditText01EditTextfindViewByIdR.id.myEditText1 //初始取得 User 触碰手机的时间。
lastUpdateTime new DateSystem.currentTimeMillis//初始化 Layout 上的 Widget 可见性recoverOriginalLayout /恢复原有的 Layout 可见性 /private void recoverOriginalLayout // TODO Auto-generated method stub mTextView01.setVisibilityView.VISIBLE mEditText01.setVisibilityView.VISIBLE mImageView01.setVisibilityView.GONE Overridepublic boolean onCreateOptionsMenuMenu menu // TODO Auto-generated method stub //menu 组 ID int idGroup1 0 int orderMenuItem1 Menu.NONE int orderMenuItem2 Menu.NONE1 /创建具有 SubMenu 的 menu/ menu.add idGroup1MENU_ABOUTorderMenuItem1R.string.app_about /创建具有退出 menu/ menu.add idGroup1MENU_EXITorderMenuItem2R.string.str_exit menu.setGroupCheckableidGroup1true true return super.onCreateOptionsMenumenuOverridepublic boolean onOptionsItemSelectedMenuItem item switchitem.getItemId case MENU_ABOUT: new AlertDialog.Builder ProtectActivity.this .setTitleR.string.app_about.setIcon R.drawable.hippo .setMessage R.string.app_about_msg .setPositiveButtonR.string.str_ok new DialogInterface.OnClickListener public void onClick DialogInterface dialoginterfaceint i .show break case MENU_EXIT: /离开程序/ finish break return super.onOptionsItemSelecteditem/监控 User 没有动作的线程/private Runnable mTasks01 new Runnable public void run intCounter1 Date timeNow new DateSystem.currentTimeMillis/计算 User 静止不动作的时间间距/timePeriod longtimeNow.getTime - longlastUpdateTime.getTimefloat timePeriodSecond floattimePeriod/1000/如果超过时间静止不动/iftimePeriodSecondfHoldStillSecond /静止超过时间的第一次标记/ ifbIfRunScreenSaverfalse /启动线程 2/ mHandler02.postDelayedmTasks02 intervalScreenSaver / Fade Out/ ifintCounter1intSecondsToChange0 bFadeFlagOuttrue mHandler03.postDelayedmTasks03 intervalFade else /在 Fade Out 后立即 Fade In / ifbFadeFlagOuttrue bFadeFlagIntrue mHandler04.postDelayedmTasks04 intervalFade else bFadeFlagInfalse intCounter4 0 mHandler04.removeCallbacksmTasks04 intCounter3 0 bFadeFlagOut false bIfRunScreenSaver true else / screen saver 正在运行中/ / Fade Out/ ifintCounter1intSecondsToChange0 bFadeFlagOuttrue mHandler03.postDelayedmTasks03 intervalFade else / 在 Fade Out 后立即 Fade In / ifbFadeFlagOuttrue bFadeFlagIntrue mHandler04.postDelayedmTasks04 intervalFade bFadeFlagInfalse intCounter4 0 mHandler04.removeCallbacksmTasks04 intCounter3 0 bFadeFlagOutfalse else / 当 User 没有动作的间距未超过时间 / bIfRunScreenSaver false /恢复原来的 Layout Visible/ recoverOriginalLayout/ 以 LogCat 监看 User 静止不动的时间间距 /Log.i HIPPO Counter1:Integer.toStringintCounter1 / Float.toStringtimePeriodSecond/反复运行线程 1 / mHandler01.postDelayedmTasks01 intervalKeypadesSaver/Screen Saver Runnable /private Runnable mTasks02 new Runnable public void run ifbIfRunScreenSavertrue intCounter2 hideOriginalLayout showScreenSaver mHandler02.postDelayedmTasks02 intervalScreenSaver else mHandler02.removeCallbacksmTasks02 / Fade Out 特效 Runnable /private Runnable mTasks03 new Runnable public void run ifbIfRunScreenSavertrue bFadeFlagOuttrue intCounter3 / 设置 ImageView 的透明度渐暗下去 / mImageView01.setAlpha225-intCounter328 Log.iHIPPO Fade out:Integer.toStringintCounter3 mHandler03.postDelayedmTasks03 intervalFade else mHandler03.removeCallbacksmTasks03 / Fade In 特效 Runnable /private Runnable mTasks04 new Runnable public void run ifbIfRunScreenSavertrue bFadeFlagIntrue intCounter4 /设置 ImageView 的透明度渐亮起来 / mImageView01.setAlphaintCounter428 mHandler04.postDelayedmTasks04 intervalFade Log.iHIPPOFade In:Integer.toStringintCounter4 else mHandler04.removeCallbacksmTasks04 /隐藏原有应用程序里的布局配置组件 /private void hideOriginalLayout /将欲隐藏的 Widget 写在此 / mTextView01.setVisibilityView.INVISIBLE mEditText01.setVisibilityView.INVISIBLE/开始 ScreenSaver /private void showScreenSaver /屏幕保护之后要做的事件写在此/ ifintDrawable4 intDrawable 0 DisplayMetrics dmnew DisplayMetrics getWindowManager.getDefaultDisplay.getMetricsdm screenWidth dm.widthPixels screenHeight dm.heightPixels Bitmap bmpBitmapFactory.decodeResource getResources screenDrawableintDrawable / Matrix 比例/ float scaleWidth float screenWidth/bmp.getWidth float scaleHeigth float screenHeight/bmp.getHeight Matrix matrix new Matrix /使用 Matrix.postScale 设置维度 ReSize / matrix.postScalescaleWidth scaleHeigth /ReSize 图片文件至屏幕分辨率 / Bitmap resizedBitmap Bitmap.createBitmap bmp00bmp.getWidthbmp.getHeightmatrixtrue /新建 Drawable 放大图片文件至全屏幕/ BitmapDrawable myNewBitmapDrawable new BitmapDrawableresizedBitmap mImageView01.setImageDrawablemyNewBitmapDrawable /使 ImageView 可见 / mImageView01.setVisibilityView.VISIBLE/每间隔设置秒数置换图片 ID,于下一个 runnable2 才会生效 / ifintCounter2intSecondsToChange0 intDrawable public void onUserWakeUpEvent ifbIfRunScreenSavertrue try mInflater01 LayoutInflater.fromProtectActivity.this mView01 mInflater01.inflateR.layout.securescreen null mEditText02 EditText mView01.findViewByIdR.id.myEditText2 new AlertDialog.Builderthis .setViewmView01 .setPositiveButtonOK new DialogInterface.OnClickListener public void onClickDialogInterface dialogint whichButton ifmEditText01.getText.toString.equals mEditText02.getText.toString resetScreenSaverListener .show /处于屏幕保护程序下,User 触发手机按键或屏幕/ /唤醒手机页面/ catchException e e.printStackTrace public void updateUserActionTime /取得单击按键事件时的系统 Time Millis/ Date timeNow new DateSystem.currentTimeMillis /重新计算单击按键距离上一次静止的时间间距/ timePeriod longtimeNow.getTime-longlastUpdateTime.getTime lastUpdateTime.setTimetimeNow.getTimepublic void resetScreenSaverListener /删除现有的 Runnable/ mHandler01.removeCallbacksmTasks01 mHandler02.removeCallbacksmTasks02 /取得单击按键事件时的
系统 Time Mills / Date timeNow new DateSystem.currentTimeMillis /重新计算单击按键距离上一次静止的时间间距/ timePeriod longtimeNow.getTime - longlastUpdateTime.getTime lastUpdateTime.setTimetimeNow.getTime /for Runnable2取消屏幕保护 / bIfRunScreenSaver false /重置 Runnable1 与 Runnable1 的 Counter/ intCounter1 0 int intCounter2 0 /恢复原来的 Layout Visible/ recoverOriginalLayout /重新 postDelayed新的 Runnable/ mHandler01.postDelayedmTasks01 intervalKeypadesSaverpublic boolean onKeyDownint keyCode KeyEvent event ifbIfRunScreenSavertrue keyCode4 /当屏幕保护
程序正在运行中,触动解除屏幕保护程序/ onUserWakeUpEvent else /更新 User 未触动手机的时间戳记/ updateUserActionTime return super.onKeyDownkeyCode eventpublic boolean onTouchEventMotionEvent event ifbIfRunScreenSavertrue /当屏幕保护程序正在运行中,触动解除屏幕保护程序/ onUserWakeUpEvent else /更新 User 未触动手机的时间戳记/ updateUserActionTime return super.onTouchEventeventprotected void onResume mHandler01.postDelayedmTasks01 intervalKeypadesSaver super.onResumeprotected void onPause try /删除运行中的线程/ mHandler01.removeCallbacksmTasks01 mHandler02.removeCallbacksmTasks02 mHandler03.removeCallbacksmTasks03 mHandler04.removeCallbacksmTasks04 catchException e e.printStackTrace super.onPause