Android 12 内置系统默认动态壁纸(视频资源)实现
Posted BestCyrus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 12 内置系统默认动态壁纸(视频资源)实现相关的知识,希望对你有一定的参考价值。
1、动态壁纸的实现
- 新建APP 项目 实现 WallpaperService
/**
* 实现壁纸服务
*/
public class MagicWallpaper extends WallpaperService
public final String TAG = this.getClass().getSimpleName();
@Override
public Engine onCreateEngine()
Log.d(TAG, "->:onCreateEngine()");
// 1: 这里返回实现的动画引擎
return new VideoEngine();
- 实现视频播放的引擎
class VideoEngine extends Engine
private MediaPlayer mp;
public VideoEngine()
super();
@Override
public void onCreate(SurfaceHolder surfaceHolder)
super.onCreate(surfaceHolder);
// Engine对象被创建时回调,这里可以做一些初始化的工作(例如 注册广播)
Log.d(TAG, "->:VideoEngine -- onCreate()");
// 这里加载本地视频资源,初始化播放器
mp = MediaPlayer.create(getApplicationContext(), R.raw.magic);
mp.setLooping(true); // 循环播放
mp.setVolume(0.0f, 0.0f);// 静音
@Override
public void onDestroy()
super.onDestroy();
//Engine对象被销毁时回调,这里可以做一些回收释放的操作(例如 注销广播)
Log.d(TAG, "->:VideoEngine -- onDestroy()");
@Override
public void onVisibilityChanged(boolean visible)
super.onVisibilityChanged(visible);
//显示、隐藏时切换,在桌面时为显示,跳转到别的App页面时为隐藏 :这里做视频的暂停和恢复播放
Log.d(TAG, "->:VideoEngine -- onVisibilityChanged() visible:" + visible);
if (mp != null)
if (visible)
mp.start();
Log.d(TAG, "->:VideoEngine -- onVisibilityChanged() mp->start");
else
mp.pause();
Log.d(TAG, "->:VideoEngine -- onVisibilityChanged() mp->pause");
@Override
public void onSurfaceCreated(SurfaceHolder holder)
super.onSurfaceCreated(holder);
//SurfaceView创建时回调,视频MediaPlayer对象播放的视频输出在这个surface上
Log.d(TAG, "->:VideoEngine -- onSurfaceCreated()");
mp.setSurface(holder.getSurface());
mp.start();
Log.d(TAG, "->:VideoEngine -- onSurfaceCreated() start!");
@Override
public void onSurfaceDestroyed(SurfaceHolder holder)
super.onSurfaceDestroyed(holder);
//Surface销毁时回调,这里销毁MediaPlayer,回收MediaPlayer
if (mp != null)
Log.d(TAG, "->:VideoEngine -- onSurfaceDestroyed()");
mp.stop();
mp.release();
mp = null;
- AndroidManifest.xml 里注册服务
<service android:name="com.hct.magicwallpaper.MagicWallpaper"
android:label="@string/wallpaper_label"
android:permission="android.permission.BIND_WALLPAPER"
android:exported="true">
<intent-filter>
<action android:name="android.service.wallpaper.WallpaperService" />
</intent-filter>
<meta-data android:name="android.service.wallpaper" android:resource="@xml/magic" />
</service>
其中的 <intent-filter> 、<action> 、<meta-data> 都是固定写法,用于系统识别,我们需要配置的是 后面的 android:resource=“@xml/magic”
- 资源配置
@xml/magic
在res目录下,新建xml文件夹 然后新建 xxxx.xml(如本例:magic.xml)
<?xml version ="1.0" encoding ="utf-8"?>
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android"
android:thumbnail="@drawable/magic_thumbnail"
android:author="@string/author"/>
VideoEngine 里 的视频资源 R.raw.magic
在res目录下,新建raw文件夹 然后拷贝进来视屏素材(如本例:magic.mp4)ps: 视频资源放在本地,放在 res/raw 目录下,然后 R.raw.xxx.mp4 调用即可
@drawable/magic_thumbnail
在drawable目录下放一张动态桌面的缩略图,主要是用来,系统浏览动态桌面展示资源列表的一个缩略图
以上步骤基本就是一个动态视屏桌面的核心功能了,即完成了一个视频资源的动态壁纸,然后安装app ,即可在系统动态壁纸里看到自己的项目。
2、系统内置
-
在主干目录 **package/wallpapers/**下新建项目 MagicWallpaper
-
拷贝前面做的app的 res 和 src 目录到MagicWallpaper里
注意:src 只包含包名部分的路径,即src/com/xxx/xxx 这样子,不要main/java 这两层
-
将AndroidManifest.xml 拷贝到文件根目录,添加
<uses-feature android:name=“android.software.live_wallpaper”/>
-
编写Android.mk脚本
LOCAL_PATH := $(call my-dir)
# Standalone Wallpaper picker app
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files) $(call all-renderscript-files-under, src)
LOCAL_CERTIFICATE := shared
LOCAL_PACKAGE_NAME := MagicWallpaper
LOCAL_SDK_VERSION := current
# LOCAL_PRIVATE_PLATFORM_APIS与LOCAL_SDK_VERSION 二选一配置
#LOCAL_PRIVATE_PLATFORM_APIS := true
include $(BUILD_PACKAGE)
- 最后如果系统有配置这个路径源码的编译,把这里新建的墙纸加入
例如我这边是
…/devices/mediatek/system/common/devices.mk 目录下脚本控制项目是否参与编译
ifeq ($(strip $(MSSI_MTK_LIVEWALLPAPER_APP)), yes)
PRODUCT_PACKAGES += LiveWallpapersPicker
# 这里加上自己的项目,就可以参与编译
PRODUCT_PACKAGES += MagicWallpaper
endif
ubuntu18.04桌面美化之动态壁纸(视频)
参考技术A 动态壁纸即把循环播放的一段视频设为桌面背景,VLC播放器即可实现效果,但是无法切换窗口,不可用。借助动态壁纸工具实现。动态桌面资源,有很多唯美的视频: 火萤视频桌面资源区
这个工具我尝试不成功,会遮挡托盘工具,有兴趣可以
参考: 设置 Linux 动态桌面的几种办法
启动Komoreb后,在桌面右击,点击右键菜单进入设置,操作简单,所见即所得。
启动Wallpaper Creator,在如下窗口分别填入壁纸名称、选择“A video”、选择作为壁纸的视频路径及缩略图路径(不可省略,否则设置壁纸时看不到),然后下一步。
下一步设置桌面时钟的显示样式,可开关时钟、设置字体、显示位置等等,完成后下一步。
在终端执行文件移动操作,操作命令根据上一步提示。
愤怒的小鸟:
腊梅:
以上是关于Android 12 内置系统默认动态壁纸(视频资源)实现的主要内容,如果未能解决你的问题,请参考以下文章
Android 静态/动态壁纸(Live wallpaper)开发-WallpaperService