视频壁纸,对于动态壁纸开发,就得用到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