Android WallpaperService启动时仅显示主屏幕和锁屏合一设置选项的实现方法
解决方案
要实现默认仅提供「同时设置主屏幕和锁屏壁纸」这一个选项,你需要通过Intent的额外参数限定系统壁纸选择界面的可选范围,具体修改如下:
核心修改点
在启动ACTION_CHANGE_LIVE_WALLPAPER的Intent中,添加WallpaperManager.EXTRA_WALLPAPER_LOCATIONS参数,指定仅允许同时设置主屏幕和锁屏的选项。该参数在API 24及以上生效,需做版本兼容处理。
修改后的完整代码
fun setToWallPaper(context: Context) { val intent = Intent(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER).apply { putExtra( WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, ComponentName(context, Mp4WallpaperService::class.java) ) flags = Intent.FLAG_ACTIVITY_NEW_TASK // 限定仅显示同时设置主屏幕和锁屏的选项 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { putExtra( WallpaperManager.EXTRA_WALLPAPER_LOCATIONS, intArrayOf(WallpaperManager.FLAG_SYSTEM or WallpaperManager.FLAG_LOCK_SCREEN) ) } } context.startActivity(intent) try { WallpaperManager.getInstance(context).clear() } catch (e: IOException) { e.printStackTrace() } }
代码说明
WallpaperManager.EXTRA_WALLPAPER_LOCATIONS:用于指定用户可选择的壁纸位置选项,传入数组形式的flag组合。WallpaperManager.FLAG_SYSTEM or WallpaperManager.FLAG_LOCK_SCREEN:表示同时覆盖主屏幕和锁屏的壁纸位置,仅保留该选项时,系统界面就只会显示对应的设置入口。- 版本判断:
FLAG_LOCK_SCREEN是API 24(Android 7.0)引入的,低版本系统不支持锁屏壁纸设置,因此仅在高版本中添加该参数。
内容的提问来源于stack exchange,提问作者harsh more
相关产品推荐
相关产品推荐

