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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 00:57:39