VideoView in a live wallpaper? VideoView in a live wallpaper? android android

VideoView in a live wallpaper?


Just use MediaPlayer instead of VideoView and use MediaPlayer.setSurface instead of MediaPlayer.setDisplay. If you use setDisplay the MediaPlayer trys to tell the SurfaceHolder to keep the screen on which isn't allowed for LiveWallpapers and will throw an error.

I use WebM/vpx8 video but this should work with whatever MediaPlayer supports (just put the video file in res/raw)

package com.justinbuser.nativecore;import android.media.MediaPlayer;import android.service.wallpaper.WallpaperService;import android.view.SurfaceHolder;import com.justinbuser.android.Log;public class VideoWallpaperService extends WallpaperService    {        protected static int                playheadTime = 0;        @Override        public Engine onCreateEngine()            {                return new VideoEngine();            }        class VideoEngine extends Engine            {                private final String        TAG     = getClass().getSimpleName();                private final MediaPlayer   mediaPlayer;                public VideoEngine()                    {                        super();                        Log.i( TAG, "( VideoEngine )");                        mediaPlayer = MediaPlayer.create(getBaseContext(), R.raw.wallpapervideo);                        mediaPlayer.setLooping(true);                    }                @Override                public void onSurfaceCreated( SurfaceHolder holder )                    {                        Log.i( TAG, "onSurfaceCreated" );                        mediaPlayer.setSurface(holder.getSurface());                        mediaPlayer.start();                    }                @Override                public void onSurfaceDestroyed( SurfaceHolder holder )                    {                        Log.i( TAG, "( INativeWallpaperEngine ): onSurfaceDestroyed" );                        playheadTime = mediaPlayer.getCurrentPosition();                        mediaPlayer.reset();                        mediaPlayer.release();                    }        }}


Just to think outside the box, is it possible to take a working video player and re-parent it under a java window in Android? I have not done this in Linux or Android, but under Windows it is possible to get the window handle of a running application and make it a child of a Java frame, with the result that the other application's window looks like its part of your Java application.