更改动态壁纸时出现错误:WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER

6
我正在按照这个教程创建我的第一个动态壁纸。但是在下面两行代码上遇到了错误,错误信息为can not be resolved or is not a fieldWallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT 我想实现的目标是:
Intent intent = new Intent( WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,
            new ComponentName(this, LiveWallService.class));

编译器提供以下建议:

WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER
WallpaperManager.COMMAND_DROP
WallpaperManager.COMMAND_SECONDARY_TAP
WallpaperManager.COMMAND_TAP
WallpaperManager.WALLPAPER_PREVIEW_META_DATA

Is any thing wrong...?


1
请注意,“ACTION_CHANGE_LIVE_WALLPAPER”和“EXTRA_LIVE_WALLPAPER_COMPONENT”是API 16+的功能。 - harism
好的,谢谢,问题已经解决了... - Arsalan
1个回答

17

WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER只在API Level 16(4.1.2)中添加。也许您将目标SDK版本设置为低于16的值?

在API级别低于16的情况下,您只能使用意图操作WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER将用户发送到整个LWP选择屏幕,并告诉他从那里选择您的壁纸。您可以按照以下方式设置代码:

Intent i = new Intent();

if(Build.VERSION.SDK_INT >= 16)
{
    i.setAction(WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
    i.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT, new ComponentName(packageName, canonicalName));
}
else
{
    i.setAction(WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER);
}

// send intent

请问在 API 等级低于 16 的情况下,你能否告诉我替代方法? - Arsalan
很遗憾,除了让用户在发送到屏幕上列出所有已安装的壁纸之前从列表中选择您的LWP之外,我所知道的API Lvl 16以下只有一个选项。我已相应地更新了我的答案。 - Thrakbad
1
我已经完成了上述工作,但仍然从4.4、4.1设备中收到一些错误/崩溃日志。为什么会这样? - unitedartinc
@mrfarts 我也遇到了同样的问题,我猜测原因可能是这样。我查看了其中一个崩溃的设备,发现制造商对操作系统进行了一些调整。我不知道它被调整了多少,但我认为不运行原生安卓可能是问题所在。一个完美的解决方案是使用 try/catch 块,像这样:https://dev59.com/CWcs5IYBdhLWcg3wcTo0 - gsgx
在Android 7.0上进行测试,仍然存在同样的问题。 - Salman Khalid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接