浅谈视频壁纸

本文探讨了视频壁纸的开发,使用WallpaperService进行实现。文章提到了在manifest中的配置,以及动态壁纸在系统设置中显示的元数据。在设置壁纸时需要获取相应权限,并且由于MediaPlayer播放本地视频可能出现黑屏问题,作者提出了一个临时解决方案,即在OnError方法中销毁并重新设置壁纸。此外,源码已上传至GitHub,欢迎贡献。文章还预告将介绍如何调用系统设置壁纸页面。
摘要由CSDN通过智能技术生成

视频壁纸,对于动态壁纸开发,就得用到WallpaperService;

manifest配置:

<!-- 配置实时壁纸Service -->
<service
    android:name="com.mill.wpengine.VideoLiveWallpaper"
    android:label="@string/app_name"
    android:exported="true"
    android:permission="android.permission.BIND_WALLPAPER"
    >
    <!-- 为实时壁纸配置intent-filter -->
    <intent-filter>
        <action android:name="android.service.wallpaper.WallpaperService" />
    </intent-filter>
    <!-- 为实时壁纸配置meta-data -->
    <meta-data
        android:name="android.service.wallpaper"
        android:resource="@xml/livewallpaper" />
</service>

注意:meta-data的 xml文件,主要是在 系统设置->显示->动态壁纸里面会显示icon和说明;

<?xml version="1.0" encoding="utf-8"?>
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android"
    android:description="@string/app_name"
    android:thumbnail="@mipmap/ic_launcher" />

设置壁纸需要权限:

<uses-permission android:name="android.permission.SET_WALLPAPER" />

因为用到视频,所以要用到MediaPlayer;而MediaPlayer 播放本地视频,有时候莫名会黑屏(暂时没找到原因,可能原因IO问题);

暂时解决方案:OnError方法里面,先销毁,再清空壁纸,再重新设置壁纸;

package com.mill.wpengine;

import android.app.WallpaperInfo;
import android.app.WallpaperManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
import android.service.wallpaper.WallpaperService;
import android.view.SurfaceHolder;
import android.widget.Toast;

import java.util.Date;

/**
 * 视频壁纸引擎服务
 *
 * 多进程sp访问,主工程里面调用:
 * SharedPreferences sp = context.getSharedPreferences(SP_EXPORT_FILE, Context.MODE_MULTI_PROCESS | Context.MODE_WORLD_READABLE);
    sp.edit().putString(SP_KEY_FIRST_SET_FILEPATH, videoFilePath).commit();

 */
public class VideoLiveWallpaper extends WallpaperService {
    public static final String TAG = "VideoLiveWallpaper";

    public static final String VIDEO_WP_ENGINE_PRE = "video_wp_engine";

    public static final String AP_APK_NAME = "<主工程包名>";

    public static final String SP_VIDEO_FILE_DEFAULT = "<默认视频路径,建议放远程路径>";
    public static final String SP_EXPORT_FILE = "plugin_vwp_export";
    public static final String SP_KEY_FIRST_SET_FILEPATH = "KEY_FIRST_SET_FILEPATH";
    public static final String SP_KEY_VIDEODESKTOP_USED_LAST_TIME = "VideoDesktop_Used_Last_Time";
    public static final String SP_KEY_ALIVE_AP_LAST_TIME = "alive_ap_last_time";

    public final static String THREAD_NAME_ALIVE_AP = "alive_thread";        // 视频壁纸引擎APK,拉活
    public static final String VIDEO_PARAMS_CONTROL_ACTION = "com.zhy.livewallpaper";
    public static final String KEY_VOLUME_WPSETTING = "KEY_Volume_WPSetting";
    public static final String KEY_ACTION = "action";
    public static final int ACTION_VOICE_SILENCE = 110;
    public static final int ACTION_VOICE_NORMAL = 111;

    private String mVideoFilePath = null;
    private VideoEngine mEngine;
    private MediaPlayer mMediaPlayer;

    //拉活 线程
    private HandlerThread mHandlerThread;
    private Handler mHandler;
    private Runnable mAliveRunnable;
    private boolean isAliveThreadRun = fals
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值