You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Glide加载图片为Bitmap设置壁纸时报错该如何解决?

Glide加载网络图片设置系统壁纸报错解决方案

核心错误原因

你的原代码存在两处核心问题:

  1. Glide的into()方法不支持直接传入空Bitmap对象接收返回值,Glide图片加载为异步操作,必须通过回调接口接收加载完成的Bitmap
  2. 未配置必要的声明权限,且未处理加载失败、空对象等异常场景,极易触发空指针或语法报错

解决步骤

1. 配置声明权限

首先在AndroidManifest.xml中添加必要权限,这两个权限均为普通权限,无需动态申请:

<!-- 加载网络图片所需的网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 设置系统壁纸权限 -->
<uses-permission android:name="android.permission.SET_WALLPAPER" />

2. 修改加载逻辑

以下是适配Glide 4.x版本的正确实现,通过CustomTarget异步接收加载完成的Bitmap后再执行壁纸设置操作:

String leo = "MY LINK FOR IMAGE";
Glide.with(show_wallpaper.this)
        .asBitmap() // 指定加载格式为Bitmap
        .load(leo)
        .into(new CustomTarget<Bitmap>() {
            @Override
            public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
                WallpaperManager wallpaperManager = WallpaperManager.getInstance(show_wallpaper.this);
                try {
                    // 可选:适配当前设备屏幕尺寸裁剪Bitmap,降低内存占用避免设置失败
                    int screenWidth = getResources().getDisplayMetrics().widthPixels;
                    int screenHeight = getResources().getDisplayMetrics().heightPixels;
                    Bitmap scaledBitmap = Bitmap.createScaledBitmap(resource, screenWidth, screenHeight, true);
                    // 设置为主屏幕壁纸
                    wallpaperManager.setBitmap(scaledBitmap);
                    
                    // 回收无用Bitmap避免内存泄漏
                    if (resource != scaledBitmap) {
                        resource.recycle();
                    }
                    scaledBitmap.recycle();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }

            @Override
            public void onLoadCleared(@Nullable Drawable placeholder) {
                // 资源被清理时的回调,可按需实现逻辑
            }

            @Override
            public void onLoadFailed(@Nullable Drawable errorDrawable) {
                super.onLoadFailed(errorDrawable);
                // 图片加载失败时的异常处理,可添加用户提示
            }
        });

注意事项

  • 如果你使用的是Glide 3.x版本,将上述代码中的CustomTarget<Bitmap>替换为SimpleTarget<Bitmap>即可,其余逻辑基本一致
  • 针对Android 12及以上系统,如需同时设置锁屏壁纸,可调用wallpaperManager.setBitmap(bitmap, null, true, WallpaperManager.FLAG_LOCK)
  • 大尺寸图片加载建议开启Glide的磁盘缓存配置,避免重复加载消耗流量

内容的提问来源于stack exchange,提问作者Muhammad Umar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 17:33:01