Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VideoView in a live wallpaper?

As per other questions android-video-as-a-live-wallpaper, is the only way to play a video in a live wallpaper is to decode it yourself?

like image 209
U Avalos Avatar asked May 25 '11 19:05

U Avalos


1 Answers

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();
                    }
        }

}
like image 147
Justin Buser Avatar answered Oct 30 '22 18:10

Justin Buser