Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将活动中的图像传递给android类(实时壁纸)_Java_Android_Live Wallpaper - Fatal编程技术网

Java 将活动中的图像传递给android类(实时壁纸)

Java 将活动中的图像传递给android类(实时壁纸),java,android,live-wallpaper,Java,Android,Live Wallpaper,我正在研究如何应用实时壁纸(GIF图像)。当我点击应用按钮时,默认的gif图像设置为壁纸。我正在从firebase获取所有图像。因此,我想将该图像设置为壁纸。我不知道如何将该gif图像从LiveViewActivity传递到gifwallperservice以将该.gif图像设置为实时壁纸,而不是默认图像。(对不起,我的英语不好,希望你能理解) LiveViewActivity 我在其中添加了一个按钮以应用实时墙纸 public class GIFWallpaperService extend

我正在研究如何应用实时壁纸(GIF图像)。当我点击应用按钮时,默认的gif图像设置为壁纸。我正在从firebase获取所有图像。因此,我想将该图像设置为壁纸。我不知道如何将该gif图像从
LiveViewActivity
传递到
gifwallperservice
以将该.gif图像设置为实时壁纸,而不是默认图像。(对不起,我的英语不好,希望你能理解)

LiveViewActivity

我在其中添加了一个按钮以应用实时墙纸


public class GIFWallpaperService extends WallpaperService {

    @Override
    public WallpaperService.Engine onCreateEngine() {

        try {

            Movie movie = Movie.decodeStream(getResources().getAssets().open("sea_gif.gif")); //Here is the default gif image

            return new GIFWallpaperEngine(movie);

        } catch (IOException e) {
            Log.d("GIFWallpaperService", "Could not loaded live wallpaper");
            return null;
        }

    }

    private class GIFWallpaperEngine extends WallpaperService.Engine {

        private final int frameDuration = 20;
        private SurfaceHolder holder;
        private Movie movie;
        private boolean visible;
        private Handler handler;

        public GIFWallpaperEngine(Movie movie) {

            this.movie = movie;
            handler = new Handler();

        }

        @Override
        public void onCreate(SurfaceHolder surfaceHolder) {
            super.onCreate(surfaceHolder);

            this.holder = surfaceHolder;

        }

        private Runnable drawGIF = new Runnable() {
            @Override
            public void run() {
                draw();
            }
        };

        private void draw() {

            if (visible) {
                Canvas canvas = holder.lockCanvas();
                canvas.save();
                canvas.scale(4f, 4f);

                movie.draw(canvas, -100, 0);

                canvas.restore();

                holder.unlockCanvasAndPost(canvas);
                movie.setTime((int) (System.currentTimeMillis() % movie.duration()));

                handler.removeCallbacks(drawGIF);
                handler.postDelayed(drawGIF, frameDuration);

            }

        }

        @Override
        public void onVisibilityChanged(boolean visible) {
            //super.onVisibilityChanged(visible);

            this.visible = visible;

            if (visible) {
                handler.post(drawGIF);
            } else {
                handler.removeCallbacks(drawGIF);
            }


        }

        @Override
        public void onDestroy() {
            super.onDestroy();
            handler.removeCallbacks(drawGIF);

        }
    }

}


在这里,我想将.gif图像传递给gif服务

public class LiveViewActivity extends AppCompatActivity {

    ImageView imageView;
    Button setLiveWallpaper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_live_view);

        imageView = findViewById(R.id.viewImage);
        Glide.with(this).load(getIntent().getStringExtra("images")).into(imageView);

        setLiveWallpaper.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                applyLiveWallpaper();
            }
        });

    }

    private void applyLiveWallpaper() {
        Intent intent = new Intent(
                WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
        intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,
                new ComponentName(this, GIFWallpaperService.class));
        startActivity(intent);
    }

}

礼品服务

这里我想接收从LiveViewActivity发送的.gif图像 设置为实时壁纸


public class GIFWallpaperService extends WallpaperService {

    @Override
    public WallpaperService.Engine onCreateEngine() {

        try {

            Movie movie = Movie.decodeStream(getResources().getAssets().open("sea_gif.gif")); //Here is the default gif image

            return new GIFWallpaperEngine(movie);

        } catch (IOException e) {
            Log.d("GIFWallpaperService", "Could not loaded live wallpaper");
            return null;
        }

    }

    private class GIFWallpaperEngine extends WallpaperService.Engine {

        private final int frameDuration = 20;
        private SurfaceHolder holder;
        private Movie movie;
        private boolean visible;
        private Handler handler;

        public GIFWallpaperEngine(Movie movie) {

            this.movie = movie;
            handler = new Handler();

        }

        @Override
        public void onCreate(SurfaceHolder surfaceHolder) {
            super.onCreate(surfaceHolder);

            this.holder = surfaceHolder;

        }

        private Runnable drawGIF = new Runnable() {
            @Override
            public void run() {
                draw();
            }
        };

        private void draw() {

            if (visible) {
                Canvas canvas = holder.lockCanvas();
                canvas.save();
                canvas.scale(4f, 4f);

                movie.draw(canvas, -100, 0);

                canvas.restore();

                holder.unlockCanvasAndPost(canvas);
                movie.setTime((int) (System.currentTimeMillis() % movie.duration()));

                handler.removeCallbacks(drawGIF);
                handler.postDelayed(drawGIF, frameDuration);

            }

        }

        @Override
        public void onVisibilityChanged(boolean visible) {
            //super.onVisibilityChanged(visible);

            this.visible = visible;

            if (visible) {
                handler.post(drawGIF);
            } else {
                handler.removeCallbacks(drawGIF);
            }


        }

        @Override
        public void onDestroy() {
            super.onDestroy();
            handler.removeCallbacks(drawGIF);

        }
    }

}



我不知道如何将.gif图像从
LiveViewActivity
发送和接收到
gifwallperservice

尝试使用DomainEventBus,它有助于在所有应用程序中传递对象、图像以及事实上的任何数据类型。


这样,您需要在创建服务时注册“事件总线”,它将能够从应用程序的任何组件接收映像。

您的问题对我来说有点模糊,但如果我没弄错,实际上,您可以通过上下文通过适配器轻松地在LiveWallperActivity中获取图片,然后通过此活动,您可以有意地将图像传递给任何您想要的活动

若要将数据从“活动”发送到“服务”,您需要重写OnStart命令,因为您可以直接访问intent:

Override
public int onStartCommand(Intent intent, int flags, int startId) {
然后从LiveViewActivity创建意图对象以启动服务,然后将图像名称放入意图对象中:

 Intent serviceIntent = new Intent(YourService.class.getName())
 serviceIntent.putExtra("IMAGE_KEY", "image");
 context.startService(serviceIntent);
当服务启动时,将调用其onStartCommand()方法,然后您可以获得图像:

public int onStartCommand (Intent intent, int flags, int startId) {
String image = intent.getStringExtra("IMAGE_KEY");
return START_STICKY;
}

首先,我将图像从
livewallparactivity
传递到
LiveViewActivity
,在
LiveViewActivity
中,我有一个按钮(设置实时墙纸)。我想将图像从LiveViewActivity发送到纸质服务类,当点击按钮时,如果您在LvieViewActivity中有图像,然后需要将其发送到您的服务,您可以有意这样做,请再次检查我的答案。