Android Studio开发壁纸应用设置后分辨率下降无法全屏问题
解决方案
1. 修复传参不匹配问题
你在Adapter跳转壁纸设置页时传入的Extra键为"image",但setwallpaper页面取值用的是"portrait",会导致拿到空的图片链接,Glide加载异常后得到的低分辨率占位图会直接导致壁纸模糊放大,先把两处的Extra键统一即可。
2. 不要从ImageView取Bitmap,直接加载匹配屏幕尺寸的原图
你当前从ImageView获取的Bitmap是Glide为适配ImageView大小压缩后的低分辨率版本,并非原图,要先获取设备真实屏幕分辨率,直接加载对应尺寸的原图设置壁纸:
// 先获取设备真实屏幕分辨率(适配挖孔/刘海屏) WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); Point realSize = new Point(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { windowManager.getCurrentWindowMetrics().getBounds(); } windowManager.getDefaultDisplay().getRealSize(realSize); int screenWidth = realSize.x; int screenHeight = realSize.y; // 设置壁纸按钮逻辑替换为直接加载原图 set.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Glide.with(setwallpaper.this) .asBitmap() .load(url) // 强制加载到屏幕真实尺寸,避免Glide自动压缩 .override(screenWidth, screenHeight) .into(new CustomTarget<Bitmap>() { @Override public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) { try { WallpaperManager wallpaperManager = WallpaperManager.getInstance(setwallpaper.this); // 提前告诉系统所需壁纸尺寸,避免华为系统自动放大 wallpaperManager.suggestDesiredDimensions(screenWidth, screenHeight); // 适配安卓版本指定全屏显示 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { wallpaperManager.setBitmap(resource, null, true, WallpaperManager.FLAG_SYSTEM); } else { wallpaperManager.setBitmap(resource); } Toast.makeText(setwallpaper.this,"设置成功",Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); Toast.makeText(setwallpaper.this,"设置失败",Toast.LENGTH_SHORT).show(); } } @Override public void onLoadCleared(@Nullable Drawable placeholder) { } }); } });
3. 检查权限配置
确认AndroidManifest.xml中已添加壁纸设置权限:
<uses-permission android:name="android.permission.SET_WALLPAPER" />
4. 忽略无关系统报错
你贴出的报错E/ResMng NATIVE_MSG_FILTER: endActivityTransaction: margin state not match是华为系统资源管理模块的内部日志,和你的壁纸设置逻辑无关,不需要处理。
内容的提问来源于stack exchange,提问作者Perseus
相关产品推荐
相关产品推荐

