首页 > 解决方案 > 在android中将视频设置为SET WALLPAPER?

问题描述

我想将视频设置为墙纸,就像 ZEDGE 墙纸和其他墙纸应用程序在 Play 商店中所做的一样。以下是 ZEDGE 壁纸应用程序的屏幕截图,该应用程序将视频设置为 android 中的壁纸。 在此处输入图像描述

我将以下代码用于图像作为壁纸:

  val intentt = Intent(Intent.ACTION_ATTACH_DATA)
                    .setDataAndType(uri, "image/*")
                    .putExtra("mimeType", "image/*")
                    .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)


            startActivityForResult(Intent.createChooser(intentt, getString(R.string.setas)), 1)

我该怎么做才能将视频设置为墙纸?

标签: javaandroidkotlin

解决方案


您好,我找到了解决问题的方法:

在 Kotlin Android 中:

    class VideoLiveWallpaperService : WallpaperService() {

    override fun onCreateEngine(): WallpaperService.Engine {
        return VideoEngine()
    }

    internal inner class VideoEngine : WallpaperService.Engine() {

        private val TAG = javaClass.simpleName
        private val mediaPlayer: MediaPlayer

        init {
            Log.i(TAG, "( VideoEngine )")
            mediaPlayer = MediaPlayer.create(baseContext, R.raw.video1)
            mediaPlayer.isLooping = true
        }

        override fun onSurfaceCreated(holder: SurfaceHolder) {
            Log.i(TAG, "onSurfaceCreated")
            mediaPlayer.setSurface(holder.surface)
            mediaPlayer.start()
        }

        override fun onSurfaceDestroyed(holder: SurfaceHolder) {
            Log.i(TAG, "( INativeWallpaperEngine ): onSurfaceDestroyed")
            playheadTime = mediaPlayer.currentPosition
            mediaPlayer.reset()
            mediaPlayer.release()
        }
    }

    companion object {
        protected var playheadTime = 0
    }

}

在 Java 中:

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

}

在清单中:

<service android:name=".VideoLiveWallpaperService"
        android:label="Video live wallpaper" android:permission="android.permission.BIND_WALLPAPER">
    <intent-filter>
        <action android:name="android.service.wallpaper.WallpaperService" />
    </intent-filter>
    <meta-data android:name="android.service.wallpaper"
        android:resource="@xml/wallpaper" />
</service>

在 res/xml/wallpaper.xml 中:

<?xml version="1.0" encoding="utf-8"?>
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android" />


推荐阅读