美文网首页
自定义系统屏保DreamService

自定义系统屏保DreamService

作者: momxmo | 来源:发表于2020-04-14 10:37 被阅读0次

    继承 DreamService来实现一个自定义屏保

    简介

    Dreams是Android设备的新型互动屏保模式。当设备置入底座或充电闲置状态时(屏幕没有关闭),此模式自动激活。白日梦模式每次显示一个,可以是纯粹的视觉效果,在用户触摸时消失,也可以是响应用户所有输入的交互式应用。您的白日梦将运行在您应用的进程内,并可以访问所有的AndroidUI工具包,可以使用视图、布局和动画等。所以它比动态壁纸或应用窗口小部件更具表现力。

    作用:
    Dreams是当充电的设备空闲,或者插入底座时显示的互动屏保。在展览或陈列时,Dreams为APP提供一个定制的展示方式。
    比如现在各个手机厂商定义很炫酷的充电动画!

    DreamService的生命周期

    • 1.onAttachedToWindow()
      初始化设置;
      1. onDreamingStarted():启动动画和计时器 ;互动屏保已经启动,这里可以开始播放动画或者其他操作
    • 3.setContentView()置Daydream场景
    • 4.setInteractive(boolean):默认情况下,用户触摸时Daydream会退出。如果你希望与用户交互,则调用setInteractive(true)
    • 5.onDreamingStopped()
      在停止 onDreamingStarted() 里启动的东西
    • 6.onDetachedFromWindow()
      清除你在onAttachedToWindow()中构建的所有东西 可能会调用的一些重要方法(比如 handlers 和 listeners)
    • 7.setFullscreen(boolean):隐藏状态栏
    • 8.setScreenBright(boolean):默认情况下,Daydream是全亮度模式,设置为false会降低屏幕亮度

    manifest 声明

    为了能让系统调用,你的 DreamService 应该在 APP 的 manifest 中注册,必须在其中加入具有”android.service.dreams.DreamService”动作的intent-filter。当目标api>=21,必须在manifest中申请BIND_DREAM_SERVICE权限:

     <service
         android:name=".MyDream"
         android:exported="true"
         android:icon="@drawable/my_icon"
         android:label="@string/my_dream_label"
      android:permission="android.permission.BIND_DREAM_SERVICE">
         <intent-filter>
             <action android:name="android.service.dreams.DreamService" />
             <category android:name="android.intent.category.DEFAULT" />
         </intent-filter>
         <!-- Point to additional information for this dream (optional) -->
         <meta-data
             android:name="android.service.dream"
             android:resource="@xml/my_dream" />
     </service>
    

    MyDayDream.java 互动屏保的定义

    public class MyDayDream extends DreamService {
        @Override
        public void onAttachedToWindow() {
            super.onAttachedToWindow();
            // Exit dream upon user touch
            setInteractive(false);
            // Hide system UI
            setFullscreen(true);
            // Set the dream layout
            setContentView(R.layout.my_day_dream);
        }
    }
    

    最后,在手机中设置-->显示-->屏保 中选择自定义的屏保;

    相关文章

      网友评论

          本文标题:自定义系统屏保DreamService

          本文链接:https://www.haomeiwen.com/subject/qkxzmhtx.html