栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

Android 12 内置系统默认动态壁纸(视频资源)实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 里注册服务

		
        	
		
		

其中的 、 、 都是固定写法,用于系统识别,我们需要配置的是 后面的 android:resource=“@xml/magic”

  • 资源配置

@xml/magic
在res目录下,新建xml文件夹 然后新建 xxxx.xml(如本例:magic.xml)



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 拷贝到文件根目录,添加

  • 编写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
转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1036362.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号