《精通Android 5 多媒体开发》——第22章,第22.2节开发屏保程序的原理

    xiaoxiao2023-12-31  166

    本节书摘来自异步社区《精通Android 5 多媒体开发》一书中的第22章,第22.2节开发屏保程序的原理,作者 王石磊,更多章节内容可以访问云栖社区“异步社区”公众号查看

    22.2 开发屏保程序的原理精通Android 5 多媒体开发在Android系统中开发一个屏保程序,其开发原理比较简单,具体说明如下所示。

    (1)首先准备一个Service,当然这个Service在主Activity中启动;然后在Service中注册一个Receiver,该Receiver 监听系统的Screen Off(即屏幕关闭)事件。当然在Service中要关闭原有的屏保(关闭系统屏保需要再配置文件中获得权限)。

    (2)然后在方法onReceive中启动自己的屏保 Activity。在此需要注意,事件Screen off不能在配置文件AndroidManifest.xml中注册,Receiver必须在Java代码中声明和注册。

    根据上述原理,我们开发出一个简单的屏保程序,具体实现流程如下所示。

    (1)定义如下两个变量来关闭系统原有屏保。

    KeyguardManager mKeyguardManager=null; private KeyguardLock mKeyguardLock=null; (2)通过如下代码关闭系统屏保。 mKeyguardManager= (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE); mKeyguardLock= mKeyguardManager.newKeyguardLock(""); mKeyguardLock.disableKeyguard(); (3)通过如下代码注册Receiver。 BroadcastReceiver mMasterResetReciever= new BroadcastReceiver() {     public void onReceive(Context context, Intent intent){           try{        Intent i = new Intent();        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        i.setClass(context, MyScreenSaver.class);        context.startActivity(i);        //finish();       }catch(Exception e){        Log.i("Output:", e.toString());       }         }    }; registerReceiver(mMasterResetReciever, new IntentFilter(Intent.ACTION_SCREEN_OFF));

    在此可以看到,在Receiver的onReceive()函数中启动了一个屏保Activity。

    (4)在配置文件中申请权限,具体代码如下所示。

    <uses-permission android:name="android.permission.DISABLE_KEYGUARD"> </uses-permission>

    经过上述操作之后,屏保Activity设计完成。

    在此我们可以将Activity设置为全屏显示,具体代码如下所示。

    requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags     (      WindowManager.LayoutParams.FLAG_FULLSCREEN,      WindowManager.LayoutParams.FLAG_FULLSCREEN     ); setContentView(R.layout.main);

    在此需要注意,必须将如下代码放在全屏代码之后,否则会无效。

    setContentView(R.layout.main);我们可以重写onKeyDown()函数,目的是通过任意键来关闭屏保Activity,具体代码如下所示。

    @Override public boolean onKeyDown(int keyCode, KeyEvent event){    super.onKeyDown(keyCode, event);    finish();    return true; } 相关资源:敏捷开发V1.0.pptx
    最新回复(0)