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

这篇具有很好参考价值的文章主要介绍了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 目录下脚本控制项目是否参与编译文章来源地址https://www.toymoban.com/news/detail-426091.html

ifeq ($(strip $(MSSI_MTK_LIVEWALLPAPER_APP)), yes)
  PRODUCT_PACKAGES += LiveWallpapersPicker
 # 这里加上自己的项目,就可以参与编译
  PRODUCT_PACKAGES += MagicWallpaper
endif

到了这里,关于Android 12 内置系统默认动态壁纸(视频资源)实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android 12 修改系统音量默认初始值

    1.需求:Android 系统出厂默认的音量值过小,需要把音量默认初始值改成音量的最大值. 2.涉及核心代码: 3.系统音量默认初始值在AudioSystem.java中定义,代码如下: 3.系统音量最大值和最小值定义在AudioService.java 中,代码如下: ------------------------------------------------------------修改方案一-

    2024年02月10日
    浏览(21)
  • Android 12.0系统默认授予读写权限给第三方app

     在12.0的系统rom定制化开发中, 在6.0以前读写权限是默认授予的,app不需要申请权限 在10.0之前需要android.permission.WRITE_EXTERNAL_STORAGE和android.permission.READ_EXTERNAL_STORAGE 权限就可以了而在安卓11的时候继续强化对SD卡读写的管理,引入了MANAGE_EXTERNAL_STORAGE权限,而之前的WRITE_EXTER

    2024年02月12日
    浏览(14)
  • android 12.0 第三方输入法app设置系统默认输入法

    在12.0的产品开发中,有功能需要要求设置默认输入法,替换掉系统的输入法,所以这就需要了解设置输入法的相关功能需求,然后根据输入法包名来设置默认输入法 在设置系统默认输入法中 每个系统输入法的id不同 根据id设置输入法 需要先根据需要设置默认输入法的id,来

    2024年02月07日
    浏览(17)
  • 视频动态壁纸 Dynamic Wallpaper for Mac中文

    Dynamic Wallpaper是一款Mac平台上的动态壁纸应用程序,它可以根据时间等因素动态切换壁纸,提供更加生动和多样化的桌面体验。 Dynamic Wallpaper包含了多个动态壁纸,用户可以根据自己的喜好选择和切换。这些动态壁纸可以根据时间等因素进行自动切换,也可以手动进行切换。

    2024年02月10日
    浏览(40)
  • Android 12.0Launcher3 去掉workspace长按弹出壁纸弹窗

    在12.0的系统开发中,在Launcher3开发中,在长按屏幕的时候,会弹出窗口,修改主屏幕配置,壁纸,等信息,由于要默认设置一些配置 不想让用户修改相关配置,这时候就需要去掉长按弹窗功能了,禁止修改相关配置 下面来分析下workspace相关长按事件的功能实现 先看workspac

    2024年02月07日
    浏览(24)
  • 桌面太单调?一起用Python做个自定义动态壁纸,竟然还可以放视频!

    前言 前段时间,用PyQt5写了几篇文章,关于Python自制一款炫酷音乐播放器、自定义桌面动画挂件、车牌自动识别系统。今天就继续给大家分享一个实战案例,带大家一起用Python的PyQt5开发一个自定义动态桌面壁纸,好玩又有趣! 首先一起来看看最终实现的自定义动态壁纸效果

    2023年04月25日
    浏览(224)
  • react&antd(12)动态表单的默认值问题

    最近遇到一个需求是有一个表单可以输入各种信息,然后还需要有一个编辑功能,点击编辑的时候需要把当前数据填入到表单里面。在网上查了很多种方法,然后我的思路是使用initialValues搭配setState()使用。默认值都为空,然后点击单条数据时把该条数据需要的字段setState()更

    2024年02月11日
    浏览(15)
  • Android12 授予APK默认权限

    不同于以往的Android版本 可以直接在此处设置: Android/frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java  授予权限类型参考下表:  比如 为DemoAPK添加定位通话以及访问内存权限.

    2024年01月21日
    浏览(13)
  • PowerShell系列(八)PowerShell系统默认内置的Provider介绍

    往期回顾 PowerShell系列(一):PowerShell介绍和cmd命令行的区别 PowerShell系列(二):PowerShell和Python之间的差异介绍 PowerShell系列(三):PowerShell发展历程梳理 PowerShell系列(四):PowerShell进入交互环境的三种方式 PowerShell系列(五):PowerShell通过脚本方式运行笔记 PowerShell系

    2024年02月11日
    浏览(15)
  • 高通Android 12/13 默认应用程序授予权限

    1、一提到权限很多Android开发者都会想到 比如拨打电话 读取手机通讯录 定位 这些都是需要申请权限,Google Android 6.0之后(sdk 23) 需要app动态申请权限 或者权限组 2、我这里打个比方 比如需要在fm应用 默认打开mic权限  3、我们需要知道这个默认应用程序的包名 (例如 xxx.

    2024年02月01日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包