1、動態(tài)壁紙的實現(xiàn)
- 新建APP 項目 實現(xiàn) WallpaperService
/**
* 實現(xiàn)壁紙服務(wù)
*/
public class MagicWallpaper extends WallpaperService {
public final String TAG = this.getClass().getSimpleName();
@Override
public Engine onCreateEngine() {
Log.d(TAG, "->:onCreateEngine()");
// 1: 這里返回實現(xiàn)的動畫引擎
return new VideoEngine();
}
}
- 實現(xiàn)視頻播放的引擎
class VideoEngine extends Engine {
private MediaPlayer mp;
public VideoEngine() {
super();
}
@Override
public void onCreate(SurfaceHolder surfaceHolder) {
super.onCreate(surfaceHolder);
// Engine對象被創(chuàng)建時回調(diào),這里可以做一些初始化的工作(例如 注冊廣播)
Log.d(TAG, "->:VideoEngine -- onCreate()");
// 這里加載本地視頻資源,初始化播放器
mp = MediaPlayer.create(getApplicationContext(), R.raw.magic);
mp.setLooping(true); // 循環(huán)播放
mp.setVolume(0.0f, 0.0f);// 靜音
}
@Override
public void onDestroy() {
super.onDestroy();
//Engine對象被銷毀時回調(diào),這里可以做一些回收釋放的操作(例如 注銷廣播)
Log.d(TAG, "->:VideoEngine -- onDestroy()");
}
@Override
public void onVisibilityChanged(boolean visible) {
super.onVisibilityChanged(visible);
//顯示、隱藏時切換,在桌面時為顯示,跳轉(zhuǎn)到別的App頁面時為隱藏 :這里做視頻的暫停和恢復(fù)播放
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創(chuàng)建時回調(diào),視頻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銷毀時回調(diào),這里銷毀MediaPlayer,回收MediaPlayer
if (mp != null) {
Log.d(TAG, "->:VideoEngine -- onSurfaceDestroyed()");
mp.stop();
mp.release();
mp = null;
}
}
}
- AndroidManifest.xml 里注冊服務(wù)
<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> 都是固定寫法,用于系統(tǒng)識別,我們需要配置的是 后面的 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文件夾 然后拷貝進(jìn)來視屏素材(如本例:magic.mp4)ps: 視頻資源放在本地,放在 res/raw 目錄下,然后 R.raw.xxx.mp4 調(diào)用即可
@drawable/magic_thumbnail
在drawable目錄下放一張動態(tài)桌面的縮略圖,主要是用來,系統(tǒng)瀏覽動態(tài)桌面展示資源列表的一個縮略圖
以上步驟基本就是一個動態(tài)視屏桌面的核心功能了,即完成了一個視頻資源的動態(tài)壁紙,然后安裝app ,即可在系統(tǒng)動態(tài)壁紙里看到自己的項目。
2、系統(tǒng)內(nèi)置
-
在主干目錄 **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腳本文章來源:http://www.zghlxwxcb.cn/news/detail-426091.html
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)
- 最后如果系統(tǒng)有配置這個路徑源碼的編譯,把這里新建的墻紙加入
例如我這邊是
…/devices/mediatek/system/common/devices.mk 目錄下腳本控制項目是否參與編譯文章來源地址http://www.zghlxwxcb.cn/news/detail-426091.html
ifeq ($(strip $(MSSI_MTK_LIVEWALLPAPER_APP)), yes)
PRODUCT_PACKAGES += LiveWallpapersPicker
# 這里加上自己的項目,就可以參與編譯
PRODUCT_PACKAGES += MagicWallpaper
endif
到了這里,關(guān)于Android 12 內(nèi)置系統(tǒng)默認(rèn)動態(tài)壁紙(視頻資源)實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!