本文共 2186 字,大约阅读时间需要 7 分钟。
API19 API23
Create:2016-03-01继承DreamService来实现一个自定义屏保
Dreams是当充电的设备空闲,或者插入底座时显示的互动屏保。在展览或陈列时,Dreams为APP提供一个定制的展示方式。1.onAttachedToWindow()
初始化设置,在这里可以调用 setContentView()2.onDreamingStarted()
互动屏保已经启动,这里可以开始播放动画或者其他操作3.onDreamingStopped()
在停止 onDreamingStarted() 里启动的东西 4.onDetachedFromWindow() 在这里回收前面调用的资源(比如 handlers 和 listeners)另外,onCreate 和 onDestroy 也会被调用。但要复写上面的几个方法来执行初始化和销毁操作。
为了能让系统调用,你的 DreamService 应该在 APP 的 manifest 中注册:
如果填写了 <meta-data>
元素,dream的附加信息就被指定在XML文件的 <dream>
元素中。
通常提供的附加信息是对互动屏保的自定义设置,指向一个自己写的Activity。
比如:res/xml/my_dream.xml
这样在Settings-Display-Daydream-你的Daydream选项右边会出现一个设置图标。点击此图标可打开指定的activity。
当目标api>=21,必须在manifest中申请BIND_DREAM_SERVICE
权限,比如:
如果不申请权限,这个互动屏保将无法启动并有类似报错:
system_process W/ActivityManager: Unable to start service Intent { act=android.service.dreams.DreamService flg=0x800000 cmp=com.google.android.deskclock/com.android.deskclock.Screensaver } U=0: not found system_process E/DreamController: Unable to bind dream service: Intent { act=android.service.dreams.DreamService flg=0x800000 cmp=com.google.android.deskclock/com.android.deskclock.Screensaver } system_process I/DreamController: Stopping dream: name=ComponentInfo{com.google.android.deskclock/com.android.deskclock.Screensaver}, isTest=false, canDoze=false, userId=0AndroidManifest.xml
注册这个service;里面指定的图标和标题都显示在设置中
MyDayDream.java
互动屏保的定义
package com.rust.service;import android.service.dreams.DreamService;import com.rust.aboutview.R;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); }}
my_day_dream.xml
互动屏保的布局文件;只有一行字
在Settings-Display-Daydream中可以找到新增的选项
转载地址:http://wgdul.baihongyu.com/